回顾一下前面的内容:
[[108-R可视化32-通过seurat包中的LabelClusters学习ggplot之一]]
[[109-R可视化33-通过seurat包中的LabelClusters学习ggplot之二]]
我们成功了解了seurat 包中关于ggplot 散点图label的操作。其实非现场简单。主要复杂的地方还是在于前期的判断工作。
那么,这里我们就来简单的复刻一下好了。
其实本质就是两个函数:
这里我们暂且不像seurat 绘图时考虑的如此周全,仅仅是提供输入一个数据框,并根据指定列进行label 的操作。
格式如下:
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,适合单细胞降维数据展示哦:
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。
我们的示例数据如下:
> 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
下面直接贴代码啦:
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)
}
试用一下:
我比较喜欢这种有线段指引的效果~
(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