首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R tips:使用shiny和plotly获得umap图的点坐标

R tips:使用shiny和plotly获得umap图的点坐标

作者头像
生信菜鸟团
发布2024-11-23 11:40:03
发布2024-11-23 11:40:03
5470
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

有的时候需要获取单细胞umap图中的部分点的坐标,并对其进行后续操作。

本文提供一种方法用于实现这个目的。

以Seruat的pbmc数据为例。

1. 查看umap plot,检查需要获得的点

代码语言:txt
复制
library(tidyverse)
 
library(Seurat)
 

 

 
#1. 查看umap plot,检查需要去除的点
 
pbmc_small <- pbmc_small %>% RunUMAP(dims = 1:10)
 
DimPlot(pbmc_small)
 

查看降维图,并考虑获得右上角的点的坐标。

2. 使用plotly手动绘制可交互的umap plot

使用plotly手动实现这个umap plot散点图。

代码语言:txt
复制
library(plotly)
 
umap_df <- pbmc_small[['umap']]@cell.embeddings %>%
 
 as.data.frame() %>%
 
  rownames_to_column("cell_id") %>%
 
  left_join(
 
    pbmc_small[['RNA_snn_res.1']] %>% rownames_to_column("cell_id"),
 
 by = "cell_id"
 
 ) 
 

 
# 实际项目中,数据点太多,只需要随机选择部分点绘制
 
# 能找到目标区域的位置即可
 
sub_umap_df <-
 
  umap_df %>%
 
  group_by(RNA_snn_res.1) %>% 
 
  slice_sample(n = 10000)
 

 
p <-
 
  plot_ly(showlegend = T) %>%
 
  add_markers(data = sub_umap_df, x= ~umap_1, y = ~umap_2, text = ~cell_id, color = ~RNA_snn_res.1, tooltip = c('x', 'y'))
 

3. 将交互式的umap plot使用shiny打开,并可以使用套索工具获得选区边界

代码语言:txt
复制
library(shiny)
 
library(plotly)
 

 
ui <- fluidPage(
 
  plotlyOutput("plot"),
 
  verbatimTextOutput("selected"),
 
)
 

 
server <- function(input, output, session) {
 

 
  output$"plot-text" <- renderText("Plot: ")
 
  output$plot <- renderPlotly(p)
 

 

 
  output$selected <- renderPrint({
 
    d <- event_data("plotly_brushed")
 
 if (!is.null(d)) {
 
      saveRDS(d, "lassso_boundary.rds")
 
      d
 
 }
 
 })
 

 
}
 

 
shinyApp(ui, server)
 

4. 在shiny页面圈选感兴趣的区域

在shiny页面,使用套索工具圈选感兴趣的区域,程序会自动将选区边界坐标导出到家目录中的lassso_boundary.rds文件中。

5. 读取套索选区,找到点坐标

代码语言:txt
复制
lasso_boudnary <- readRDS("lassso_boundary.rds")
 

 

 
# find points
 
point_in_poly_idx <-
 
  sp::point.in.polygon(
 
    point.x = umap_df$umap_1,
 
    point.y = umap_df$umap_2,
 
    pol.x = lasso_boudnary$x,
 
    pol.y = lasso_boudnary$y
 
 )
 

 

 
points_selected <- umap_df[point_in_poly_idx != 0, ]
 

 

 
sub_umap_df %>%
 
  ggplot(aes(x = umap_1, y = umap_2, color = RNA_snn_res.1)) +
 
  geom_point() +
 
  geom_polygon(data = as.data.frame(lasso_boudnary), aes(x = x, y = y), fill = NA, color = "black", inherit.aes = F) +
 
  geom_point(data = points_selected, color = "black")
 

 
points_selected
 

使用sp包计算所有在选区中的点,并在umap中展示套索选区和选中的点。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 查看umap plot,检查需要获得的点
  • 2. 使用plotly手动绘制可交互的umap plot
  • 3. 将交互式的umap plot使用shiny打开,并可以使用套索工具获得选区边界
  • 4. 在shiny页面圈选感兴趣的区域
  • 5. 读取套索选区,找到点坐标
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档