Closed ixxmu closed 2 years ago
单细胞转录组学测序是目前比较火热的组学技术,单细胞测序在很多高分文章中露脸的次数非常频繁。然而数据拿到手,分析后的可视化也是发文章时的重点内容。看到CNS或者其他高质量文章中单细胞的可视化总是一种高大上的感觉,可是自己手里的数据可视化却是与别人有很大差距。那么,接下来就随着笔者初探单细胞作图的修饰,抛弃默认出图,修饰作图,提高档次,向好的文章看齐!也让自己的数据有一个更好的呈现!
为了方便演示,示例数据我们采用Seurat官方提供的PBMC单细胞数据。首先加载数据。
1.library(SeuratData) #加载seurat数据集
2.InstallData("pbmc3k")
3.data("pbmc3k")
PBMC <- pbmc3k.final
可能到这里会发现一个错误。
1.#ERROR
2.#Error in eval(call("@", object, slot)):
3.#"images"槽名不存在于"Seurat"类别对象中
这是因为加载的数据时Seurat较早的版本,目前已经更新到4.0了,所以需要将其转换一下。(知识点:例如在公共数据库挖掘时,拿到别人Seurat2的数据时,就可以用下面的函数转化)
PBMC = UpdateSeuratObject(object = PBMC)#旧版的seurat对象转变为新版
数据准备完成了,就开始真正的操作吧!
所有的画图软件都会有一个默认的配色,单细胞作图的seurat也不例外。但是如果你阅读了足够多的单细胞好文章,就会发现,这些文章基本无一例外的,都不会使用默认的配色,而是选择自己配色,让图形可视化更加好看。
一般默认情况下,seurat做出的UMAP图如下,这种配色其实很普通,如果整个文章都是这个色调,看起来不是很好。
1.#普通展示细胞聚类图
DimPlot(PBMC, label = T)+NoLegend()
如果稍加修饰,修改坐标轴,去除坐标轴刻度,自定义添加标题,给UMAP图加上边框等等修饰,立马就能看出区别。但是相比于高分文章,还是有点欠缺。
1.DimPlot(PBMC, label = T)+
2. NoLegend()+labs(x = "UMAP1", y = "UMAP2") +
3. theme(axis.text.y = element_blank(),
4. axis.ticks.y = element_blank(),
5. axis.text.x = element_blank(),
6. axis.ticks.x = element_blank())+
7. theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid")) #加边框
其实关键的还是对颜色的修饰,以两篇高分文章的配色为例看看效果:
#第一种配色方案来源于《Cell》文章:DOI:10.1016/j.cell.2021.05.013。
1.library(paletteer) #提供了 R 编程环境中提供的数百种其他调色板的组合集合,详情可以查看此包,总有你满意的方案
2.pal <- paletteer_d("ggsci::nrc_npg")[c(1,3,4,9,5,2,6,8,10)] #有几群细胞需要标记就选几种颜色
3.DimPlot(PBMC, label = T,
4. cols= pal, #设置颜色
5. pt.size = 1.5,#设置点的大小
6. repel = T)+#标注有点挤,repel=T可以让排列更加合理
NoLegend()
是不是感觉有那“味”了!
#第二种配色方案来源于《Nature communications》发表的文章:https://www.nature.com/articles/s41467-021-25246-7#Sec24
1.library(RColorBrewer)#配置自己需要的颜色
2.cell_type_cols <- c(brewer.pal(9, "Set1"), "#FF34B3","#BC8F8F","#20B2AA","#00F5FF","#FFA500","#ADFF2F","#FF6A6A","#7FFFD4", "#AB82FF","#90EE90","#00CD00","#008B8B","#6495ED","#FFC1C1","#CD5C5C","#8B008B","#FF3030", "#7CFC00","#000000","#708090")
3.DimPlot(PBMC, label = T,
4. cols= cell_type_cols, #设置颜色
5. pt.size = 1.5,#设置点的大小
6. repel = T)+#标注有点挤,repel=T可以让排列更加合理
7. NoLegend()
这样做出的图更加好看,符合高分文章的标准!
UMAP图还有一个重要的作用是是展示某些基因在cluster中的表达。
1.#默认作图
2.FeaturePlot(PBMC, features = "S100A8")
3.#修饰图片
4.mycolor <- c('lightgrey', 'blue','seagreen2')#设置颜色
5.FeaturePlot(PBMC, features = 'S100A8',cols = mycolor, pt.size = 1.5)+
theme(panel.border = element_rect(fill=NA,color="black", size=1, linetype="solid"))#加边框
热图是单细胞测序数据分析中展示marker基因的重要方式,一般使用DoHeatmap函数实现。默认的图片也是可以的,但是缺乏生动的感觉,所以很少文章用默认的画图,多多少少也是进行了修饰。
这里用每个cluster前top3基因演示,默认的绘图如下:
1.DoHeatmap(PBMC,
2. features = as.character(unique(top3$gene)),
3. group.by = "seurat_clusters",
4. assay = "RNA")
我们对热图配色进行修改,看起来会顺眼很多!
1.DoHeatmap(PBMC,
2. features = as.character(unique(top3$gene)),
3. group.by = "seurat_clusters",
4. assay = "RNA",
5. group.colors = c("#C77CFF","#7CAE00","#00BFC4","#F8766D","#AB82FF","#90EE90","#00CD00","#008B8B","#FFA500"))+ #设置组别颜色
6. scale_fill_gradientn(ccolors = c("navy","white","firebrick3"))#设置热图颜色
看这个热图,其实我们可以发现,4群和6群的细胞marker基因表达一致,但是热图是按照0-8这个顺序排列的,如果将顺序调整一下,自定义cluster的排序,会让结果看起来会更加明显。
1.PBMC$seurat_clusters <- factor(x = PBMC$seurat_clusters, levels = c('0','1','2','3','4','6','5','7','8'))
2.DoHeatmap(PBMC,
3. features = as.character(unique(top3$gene)),
4. group.by = "seurat_clusters",
5. assay = "RNA",
6. group.colors = c("#C77CFF","#7CAE00","#00BFC4","#F8766D","#AB82FF","#90EE90","#00CD00","#008B8B","#FFA500"))+ #设置组别颜色
7. scale_fill_gradientn(ccolors = c("navy","white","firebrick3"))#设置热图颜色
当然了,以上的改变我们都是在Seurat默认画图函数的基础上修饰得到的,如果要通过marker基因从头画热图,则需要提取表达矩阵和分组信息,用Heatmap来做。具体已经有人做了这个工作,可以参考链接:
https://www.it610.com/article/1211113345411813376.html
小提琴图也是文章中最常见的图,例如下图,也是比较好看的,可以用于展示marker基因。
(文章截图)【1】
但是R语言画出来的小提琴图只能单独展示一个基因的表达,笔者在查阅后发现,文章中这种小提琴图基本是用Python画的,这就很不友好,总不能为了一个图学python吧,也太费时间了。不过还好,有人已经通过改造,出了一个包,帮我们解决这个问题(感谢分享者)。
1.install.packages("remotes")
2.remotes::install_github("lyc-1995/MySeuratWrappers")#通过链接安装包
3.library(MySeuratWrappers)
4.#需要展示的基因
5.markers <- c('CD3D', 'S100A8', 'S100A9', 'CD79A', 'CCL5', 'NKG7', 'GZMA', 'IL32', 'CD4', 'CD8A', 'LTB', 'FCN1', 'MS4A1', 'SPON2','FCER1A','SERPINF1', 'TMEM40', 'CD3E')
6.my36colors <-c('#E5D2DD', '#53A85F', '#F1BB72', '#F3B1A0', '#D6E7A3', '#57C3F3', '#476D87', '#E95C59', '#E59CC4', '#AB3282', '#23452F', '#BD956A', '#8C549C', '#585658', '#9FA3A8', '#E0D4CA', '#5F3D69', '#C5DEBA', '#58A4C3', '#E4C755', '#F7F398', '#AA9A59', '#E63863', '#E39A35', '#C1E6F3', '#6778AE', '#91D0BE', '#B53E2B', '#712820', '#DCC1DD', '#CCE0F5', '#CCC9E6', '#625D9E', '#68A180', '#3A6963', '#968175')#颜色设置
7.VlnPlot(PBMC, features = markers,
8. stacked=T,pt.size=0,
9. cols = my36colors,#颜色
10. direction = "horizontal", #水平作图
11. x.lab = '', y.lab = '')+#横纵轴不标记任何东西
12. theme(axis.text.x = element_blank(),
13. axis.ticks.x = element_blank())#不显示坐标刻度
最后利用AI将图片稍加修饰,就可以得到与别人文章中一样的图了。
DotPlot函数可以展示感兴趣基因的表达量,也是发文章比较喜欢用的图,默认的图形如下:
虽然看起来也可以,但是看起来没有很惊艳,如果对于颜色和外形做点修饰,会更加吸引眼球,为自己文章增色不少!
1.#dotplot的改造
2.DotPlot(PBMC, features = markers)+coord_flip()+theme_bw()+#去除背景,旋转图片
3. theme(panel.grid = element_blank(),
4. axis.text.x=element_text(angle=90,hjust = 1,vjust=0.5))+#文字90度呈现
5. scale_color_gradientn(values = seq(0,1,0.2),ccolours = c('#330066','#336699','#66CC66','#FFCC33'))+#颜色渐变设置
6. labs(x=NULL,y=NULL)+guides(size=guide_legend(order=3))
以上就是单细胞基础作图的一些修饰,只要用心,多看文章,向高分文章看齐,让自己的文章也更加显眼和惊艳!数据分析很重要,可视化也是非常重要的一部分,呈现效果好的话,对于自己的文章和数据都是锦上添花的作用。
参考文献:
【1】Wu, X., Liu, Y., Jin, S. et al. Single-cell sequencing of immune cells from anticitrullinated peptide antibody positive and negative rheumatoid arthritis. Nat Commun 12, 4977 (2021). https://doi.org/10.1038/s41467-021-25246-7
欢迎扫描加入我们的分学科新社群
https://mp.weixin.qq.com/s/B2PI19sdNkiE_ZGeguqcuQ