前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >119-R可视化37-利用循环实现ggplot批量作图并拼图

119-R可视化37-利用循环实现ggplot批量作图并拼图

作者头像
北野茶缸子
发布2022-04-05 15:41:19
5.7K0
发布2022-04-05 15:41:19
举报
文章被收录于专栏:北野茶缸子的专栏
  • 参考:
    • Single-cell RNA-seq: Clustering Analysis | Introduction to single-cell RNA-seq (hbctraining.github.io)[1]

前言

前段时间有一些业务上需要批量作图的场景。比如下面这种:

其实简单的R 拼图,我喜欢patchwork 的加减乘除。但这种4x4 布局的图片,对象又多,一个个创建不现实;代码写起来,也非常不优雅。

如果可以批量作图 + 批量拼图就好了。其实也很简单。

来试试吧。

这里直接用seurat 的示例数据:Seurat - Guided Clustering Tutorial • Seurat (satijalab.org)[2]

★There are 2,700 single cells that were sequenced on the Illumina NextSeq 500. The raw data can be found here[3]. ”

代码语言:javascript
复制
pbmc.data <- Read10X(data.dir = "/Users/appe/OneDrive - yzygn/15macbook/4_code/R/1-multiplot&dis/filtered_gene_bc_matrices/hg19")
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)

pbmc <- NormalizeData(pbmc) %>% FindVariableFeatures() %>% 
  ScaleData() %>% RunPCA()

dim(pbmc@reductions$pca)

> dim(pbmc@reductions$pca)
[1] 2700   50

pbmc <- RunUMAP(pbmc, dims = 1:50)
pbmc_df <- as.data.frame(cbind(Embeddings(pbmc, "pca"), Embeddings(pbmc, "umap")))

> colnames(pbmc_df)
 [1] "PC_1"   "PC_2"   "PC_3"   "PC_4"   "PC_5"   "PC_6"   "PC_7"   "PC_8"   "PC_9"  
[10] "PC_10"  "PC_11"  "PC_12"  "PC_13"  "PC_14"  "PC_15"  "PC_16"  "PC_17"  "PC_18" 
[19] "PC_19"  "PC_20"  "PC_21"  "PC_22"  "PC_23"  "PC_24"  "PC_25"  "PC_26"  "PC_27" 
[28] "PC_28"  "PC_29"  "PC_30"  "PC_31"  "PC_32"  "PC_33"  "PC_34"  "PC_35"  "PC_36" 
[37] "PC_37"  "PC_38"  "PC_39"  "PC_40"  "PC_41"  "PC_42"  "PC_43"  "PC_44"  "PC_45" 
[46] "PC_46"  "PC_47"  "PC_48"  "PC_49"  "PC_50"  "UMAP_1" "UMAP_2"

1-先列表存对象,再拼图

因为仅仅是做绘图展示,这里我们用pca 得到的50个主成分绘制umap 结果,并用颜色深浅表示前20个pca 结果。

目前对于绘图,我主要使用的两个包是patchwork 和cowplot。

其实它们的绘图函数都是带有接收list 作为输入的选项。

也就是说,我们可以使用lapply 等循环操作,把一个个绘图对象保存到一个列表。再传递给对应的绘图函数。

代码语言:javascript
复制
my_umap_Plot <- function(pc){
  ggplot(pbmc_df, 
         aes(UMAP_1, UMAP_2)) +
    geom_point(aes_string(color = pc), 
               alpha = 0.7) +
    scale_color_gradient(guide = "none", 
                         low = "grey90", 
                         high = "blue") +
    ggtitle(pc) + theme_bw()
}

umap_list <- lapply(paste0("PC_",1:12), my_umap_Plot)

我们只画12个。

cowplot

cowplot 中,主要通过plot_grid 完成图片的排列。

关于包含ggplot 对象的列表,通过参数plotList 传入:

★(optional) List of plots to display. Alternatively, the plots can be provided individually as the first n arguments of the function plot_grid (see examples). ”

另外,align = "v" 表示竖直方向对齐,align = "h" 表示水平方向对齐,ncolnrow 控制行列数目。非常直观。

代码语言:javascript
复制
plot_grid(plotlist = umap_list, align = "h", 
          nrow = 3)

patchwork

patchwork 提供了函数wrap_plots,供我们进行拼图。

从说明书看,它是可以直接接受列表对象的:

★multiple ggplots or a list containing ggplot objects ”

代码语言:javascript
复制
pp_patchwork <- wrap_plots(umap_list, byrow = T, nrow = 3)

2-直接使用管道

这个个人认为更为优雅一些,如果拼图使用的绘图对象无需保存,我们直接利用管道符号,将ggplot 对象传递给拼图函数。

代码语言:javascript
复制
pp_cow <- lapply(paste0("PC_",1:12), my_umap_Plot) %>% 
  plot_grid(plotlist = ., align = "h", 
            nrow = 3)
pp_patchwork <- lapply(paste0("PC_",1:12), my_umap_Plot) %>% 
  wrap_plots(byrow = T, nrow = 3)

更复杂的内容

比如不同的拼接比例等等内容,可以参考:[[88-R可视化20-R的几种基于ggplot的拼图解决方案]]

如果是cowplot 用户,可以参考:Aligning plots • cowplot (wilkelab.org)[4]

参考资料

[1]

Single-cell RNA-seq: Clustering Analysis | Introduction to single-cell RNA-seq (hbctraining.github.io): https://hbctraining.github.io/scRNA-seq_online/lessons/08_SC_clustering_quality_control.html#/

[2]

Seurat - Guided Clustering Tutorial • Seurat (satijalab.org): https://satijalab.org/seurat/articles/pbmc3k_tutorial.html

[3]

here: https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz

[4]

Aligning plots • cowplot (wilkelab.org): https://wilkelab.org/cowplot/articles/aligning_plots.html

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1-先列表存对象,再拼图
    • cowplot
      • patchwork
        • 参考资料
    • 2-直接使用管道
    • 更复杂的内容
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档