ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
116 stars 30 forks source link

大海哥单细胞数据Dotplot图美化的保姆级教程!! #4501

Closed ixxmu closed 8 months ago

ixxmu commented 8 months ago

https://mp.weixin.qq.com/s/JVvMXeR8K0bgfVBqc0NYIQ

ixxmu commented 8 months ago

大海哥单细胞数据Dotplot图美化的保姆级教程!! by 生信滩

大海哥也教了不少有关单细胞数据可视化的方式,但是没有讲解一些专门对细节美化的,这次大海哥带来一种Dotplot美化的教程,可以让小伙伴单细胞的数据使用Dotplot可视化的时候,绘制自己的图更加精美!其实这个Dotplot图呢,就是点图/气泡图是类似热图的图表,它提供了一种紧凑的方式,通过不同大小和颜色的点同时显示两个定量信息。尽管这种可视化方法很受欢迎,特别是在单细胞 RNA 测序 (scRNA-seq) 研究中,但用于制作点图的现有工具在功能和可用性方面受到限制。

同时呢,我们通常使用的是Seurat::DotPlot可视化方式,这个Seurat::DotPlot 是可视化 Marker 基因如何跨不同 cluster 变化的直观方式。

这个图里面的点的大小编码一个类中细胞的百分比,而颜色编码一个类中所有细胞的 AverageExpression 水平。

了解了这个图的构成,我们就去为Dotplot图进行美化吧!

我们使用的是R包scRNAtoolVis自带的数据pbmc,先看一下我们前期准备吧

library(scRNAtoolVis) # 为了使用数据library(Seurat) # dotplotlibrary(cowplot) # plot_grid

加载下数据:       

 

httest <- system.file("extdata", "htdata.RDS", package = "scRNAtoolVis")pbmc <- readRDS(httest)# add groups pbmc$groups <- rep(c('stim','control'),each = 1319)# add celltypepbmc$celltype <- Seurat::Idents(pbmc)# load markergenedata("top3pbmc.markers")# checkhead(top3pbmc.markers,3)

我们一步一步来,从基础的散点图开始,

library(ggplot2)p <- DotPlot(pbmc, features = split(top3pbmc.markers$gene, top3pbmc.markers$cluster), cols = c("#ffffff", "#448444")) + RotatedAxis() + # 来自Seurat theme( panel.border = element_rect(color = "black"), panel.spacing = unit(1, "mm"), axis.title = element_blank(), axis.text.y = element_blank(), )P

为了让小伙伴更清楚的知道如何绘制,我们使用ggplot2从头开始绘制:

p$data$feature.groups2 <- factor(p$data$feature.groups, levels = c("Platelet","DC","NK","FCGR3A+ Mono","CD8 T","B","Memory CD4 T","CD14+ Mono","Naive CD4 T"))
library(ggh4x)
strip <- strip_themed( background_x = elem_list_rect(fill = brewer.pal(9, "Paired")))把数据设置好后,下面开始绘制图p$data %>% ggplot(aes(x = features.plot, y = id)) + geom_point(aes(size = pct.exp, color = avg.exp.scaled)) + facet_wrap2(~feature.groups2, scales = "free_x", strip = strip, nrow = 1) + theme_classic() + theme(axis.text.x = element_text(angle = 90, hjust = 0.5, vjust = 0.3, color = "black"), axis.title = element_blank(), strip.background = element_rect(color = "white"), axis.text.y = element_blank()) + scale_color_gradient(low = "#ffffff", high = "#448444", name = "avg.exp") -> p

p

这个图其实已经很好看了,但是中间细节呢,我们想改一下,比如气泡的样式等等

来看一下散点图的修饰

#散点图修饰df <- data.frame(x = 0, y = levels(pbmc), stringsAsFactors = F )df$y <- factor(df$y, levels = df$y )
pl <- ggplot(df, aes(x, y, color = factor(y))) + geom_point(size = 6, show.legend = F) + scale_color_manual(values = rev(brewer.pal(9, "Paired"))) + theme_classic() + scale_x_continuous(expand = c(0,0)) + theme( plot.margin = margin(r=0), axis.title = element_blank(), axis.text.x = element_blank(), axis.text.y = element_text(size = 9), axis.ticks = element_blank(), axis.line = element_blank() )
Pl    

从点开始修改,我们修改成矩形:

#改变形状pl2 <- ggplot(df, aes(x, y, color = factor(y))) +geom_point(size = 6, shape = 15, show.legend = F) +scale_color_manual(values = rev(brewer.pal(9, "Paired"))) +theme_classic() +scale_x_continuous(expand = c(0,0)) +theme(plot.margin = margin(r=0),axis.title = element_blank(),axis.text.x = element_blank(),axis.text.y = element_text(size = 9),axis.ticks = element_blank(),axis.line = element_blank() )
pl2

然后我们在使用cowplot函数进行拼图:

#拼图library(cowplot)plot_grid(pl2, p, align = "h", axis="bt", rel_widths = c(1.5, 9))

怎么样,有没有学会呢,

下面大海哥在介绍一种绘制的方式FlexDotPlot,

这是一个 R 包,用于从多元数据(包括 scRNA-seq 数据)生成点图。它提供了通用且易于使用的解决方案,具有高度的多功能性。还提供交互式 R Shiny 应用程序,允许非 R 用户轻松生成具有多个可调参数的点图

这个包可以帮助我们改变图形的形状,来看看:

#BiocManager::install("FlexDotPlot")#没有的小伙伴下载一下library(FlexDotPlot)

FlexDotPlot 包采用数据框作为输入:前两列包含沿 x 和 y 轴分布的两个因子,后跟要显示的相应定量和/或定性数据

下面我们加载示例数据

#加载数据data(PBMC3K_example_data)head(PBMC3K_example_data)

summary(PBMC3K_example_data)

我们使用月亮的形式去展示

#半月dot_plot(data.to.plot = PBMC3K_example_data, size_var = "pct.exp", shape.scale = 25, shape_var= "pct.exp", col_var = "avg_logFC", vertical_coloring=c(NA, "gray80"))

是不是有点与众不同,我们还可以添加聚类树

#聚类树dot_plot(data.to.plot = PBMC3K_example_data, size_var = "pct.exp", shape.scale = 25, shape_var= "pct.exp", col_var = "avg_logFC", dend_x_var = c("pct.exp","avg_logFC"), dend_y_var = c("pct.exp","avg_logFC"), dist_method="euclidean", hclust_method="ward.D")

   

其实还有很多的展示形式,小伙伴要多多理解代码的意思,多多摸索,这样才能绘制出自己想要的图片,上面就是我们这次的教程,小伙伴快去动手试试!  

大海哥还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询~

定制生信分析

服务器租赁

扫码咨询大海哥


往期回顾

01

生信人必备神器——1024G存储的生信服务器,免费试用啦

02

【BWMR】孟德尔随机化分析利器,克服分析挑战!

03

分子对接花了几个小时?批量分子对接帮你5分钟搞定!

04

手把手带你复现XGboost和LightGBM机器学习算法特征重要性排名和 SHAP 汇总图