前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >110-R可视化34-实现seurat包中LabelClusters给散点图中心添加文本的代码

110-R可视化34-实现seurat包中LabelClusters给散点图中心添加文本的代码

作者头像
北野茶缸子
发布2022-04-05 15:27:52
发布2022-04-05 15:27:52
94100
代码可运行
举报
运行总次数:0
代码可运行
  • 参考:
    • Seurat::LabelClusters

前言

回顾一下前面的内容:

[[108-R可视化32-通过seurat包中的LabelClusters学习ggplot之一]]

[[109-R可视化33-通过seurat包中的LabelClusters学习ggplot之二]]

我们成功了解了seurat 包中关于ggplot 散点图label的操作。其实非现场简单。主要复杂的地方还是在于前期的判断工作。

那么,这里我们就来简单的复刻一下好了。

开始操作

其实本质就是两个函数:

  • 根据不同的cluster 获取其对应位置(坐标数据集的median值);
  • 绘图函数,包括散点图和label 图;

这里我们暂且不像seurat 绘图时考虑的如此周全,仅仅是提供输入一个数据框,并根据指定列进行label 的操作。

格式如下:

代码语言:javascript
代码运行次数:0
复制
myLabelggPoint <- function(my_data, my_label, ifrepel){ NULL }

这里再额外安利一个seurat 中散点图用到的R包:exaexa/scattermore: very fast scatterplots for R (github.com)[1]

★Scatterplots with more datapoints. If you want to plot bazillions of points without much waiting, use this. ”

天然替代geom_point,适合单细胞降维数据展示哦:

代码语言:javascript
代码运行次数:0
复制
points  .  average time (s)
--------+------------------
1e4     .  0.037
3e4     .  0.039
1e5     .  0.042
3e5     .  0.051
1e6     .  0.076     -- ~50% of the time is R raster conversion overhead
3e6     .  0.170     -- caches start to overflow here
1e7     .  0.460

因此,绘图的散点图部分,我们使用scattermore::geom_scattermore 进行散点图的绘制。

你可以将其理解为快速出图版的geom_point。

我们的示例数据如下:

代码语言:javascript
代码运行次数:0
复制
> head(test_data)
  cluster     Umap1     Umap2
1       0 12.223811 12.935661
2       1  1.072768  4.461689
3       2  5.348801 -1.944587
4       3 12.252241  4.431637
5       2  5.311937 -2.484171
6       2  6.282049  2.875928

下面直接贴代码啦:

代码语言:javascript
代码运行次数:0
复制
myLabelggPoint <- function(my_data, my_cluster, my_title = "Example_Umap", 
                           my_text = T, my_repel = T) {
  colnames(my_data)[colnames(my_data) %in% my_cluster] <- "Cluster"
  p <- ggplot() + scattermore::geom_scattermore(data = my_data,
    aes_string(x = "Umap1", y = "Umap2", 
                                           color = "Cluster")) + 
    theme_bw() +
    theme(
      plot.background = element_blank(),
      panel.grid.major=element_blank(),
      panel.grid.minor=element_blank(),
      plot.title = element_text(hjust = 0.5,
                                size = 14)
    ) + # guides(color = guide_legend(override.aes = list(size = 0.7),ncol = 1)) + 
    labs(title = my_title, x = NULL, y = NULL) + 
    scale_color_manual(values = RColorBrewer::brewer.pal(9, 'Set3'))
  if(my_text){
    median_df <- my_data %>% group_by(Cluster) %>%
      summarise(median.1 = median(Umap1),
                median.2 = median(Umap2))
    geom.use <- ifelse(test = my_repel, yes = ggrepel::geom_text_repel, 
                       no = geom_text)
    p <- p + geom.use(data = median_df,
                  aes(median.1,
                      median.2, label = Cluster),
                 min.segment.length = 0)
  }
  return(p)
}

试用一下:

我比较喜欢这种有线段指引的效果~

代码语言:javascript
代码运行次数:0
复制
(p <- myLabelggPoint(test_data, "Cluster"))

总结

综上,通过学习LabelClusters ,我们成功偷学到了seurat 的代码技术,并将其运用到了自己的绘图上。毕竟我们的重点还是在于给散点图的中心添加文本,因此其中代码的复杂逻辑并未深究。

但是,如果你致力于构建自己的绘图R 包,也可以尝试学习seurat 的dimPlot 及LabelClusters 函数哦。

不过话又说回来,为了实现某个函数的功能,真的需要阅读这个函数的全部代码吗?

我看未必,但如果是为了一些目的以外的东西,试一试,也无妨嘛。

参考资料

[1]

exaexa/scattermore: very fast scatterplots for R (github.com): https://github.com/exaexa/scattermore

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

本文分享自 北野茶缸子 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 开始操作
  • 总结
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档