新闻动态
你的位置:国奥体育app是正规的平台吗 > 新闻动态 > 使用ggplot2美化Dotplot结果
使用ggplot2美化Dotplot结果
2025-06-23 20:35    点击次数:113
前情提要

图片

并且基于pbmc3k的数据,使用Dotplot进行可视化和简单调整。这期一起来了解一下,使用Dotplot参数调整美化结果,以及基于ggplot2进行可视化

图片

Dotplot可视化及美化

示例数据为pbmc-3k的注释分群后的数据,使用FindAllMarkers查找并获取top5的Marker基因进行可视化

#top5 marker基因获取pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE, min.pct = 0.25,  logfc.threshold = 0.25, verbose = FALSE)top5 = pbmc.markers %>% group_by(cluster) %>% top_n(n = 5, wt = avg_log2FC)g = unique(top5$gene)
默认参数绘图及调整美化

如果直接使用默认参数,不调节参数展示的情况

DotPlot(pbmc, features = g)

图片

可以看到横坐标中features展示列全部挤在了一起,不便于阅读。因为Dotplot绘图是基于ggplot2的语法结构的,所以可以调用ggplot2包里面的函数去倾斜展示基因,或者将基因和细胞亚群调换位置的方式进行调整

1. 调节features的排列角度

使用RotatedAxis()函数将坐标轴标签旋转,让features列展示的基因,由最开始的平铺变为倾斜,方便阅读

DotPlot(pbmc, features = g) + RotatedAxis()

图片

不过RotatedAxis()函数里面角度是确定了的,如果需要根据自己的需求调整角度可以使用theme()函数来调整x轴的具体倾斜角度

图片

DotPlot(pbmc, features = g) +   theme(axis.text.x=element_text(angle=70,hjust = 1))

图片

2.将features和identity调换位置

使用coord_flip()函数翻转坐标轴,使得图形的布局更加合理。使用RotatedAxis()函数旋转坐标轴标签,以便更好地展示和阅读。
DotPlot(pbmc, features = g) + coord_flip()+ RotatedAxis()

图片

3. 分组展示Marker基因

使用split函数按照基因列表以及分类列表进行分组,Marker基因将根据它们所属的群组(cluster)被分组显示。基于cols函数指定点图的颜色使用RotatedAxis函数将x轴标签旋转基于theme函数去调整坐标轴,设置文本颜色和大小、添加边框、调整间距等
DotPlot(pbmc,        features = split(top5$gene, top5$cluster),        cols = c("#ffffff", "firebrick3")) +  RotatedAxis() +   theme(    strip.text.x = element_text(size = 8),    axis.text.x  = element_text(color="black",size=10),    panel.border = element_rect(color = "black"),    panel.spacing = unit(1, "mm"),    axis.title = element_blank(),    axis.text.y = element_blank(),  )

图片

使用ggplot2绘图及美化

已经有很多推文基于ggplot2去可视化及美化点图:

比如咱们生信菜鸟团的Dotplot美化——使用ggplot2基于结果美化生信益站的Seurat::DotPlot美化 (二) ——细胞亚群坐标轴Color Bar注释

那这边小谢就偷个懒,基于前辈们整理好的代码来使用ggplot2绘制marker基因的点图。

1. 提取数据并整理细胞亚群排序
#获取需要的数据p <- DotPlot(pbmc,             features = split(top5$gene, top5$cluster),             cols = c("#ffffff", "firebrick3")) #重新整理细胞亚群的排列,倒序排列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"))

图片

p

图片

p$data2. 使用ggplot2绘图

ggplot2绘图相关的内容是需要反复练习的,如果没有R语言基础想要系统学习的话,可以了解一下生物信息学马拉松授课,最近一期在广州线下,欢迎大家来广州相聚!

## 加载R包定义图例颜色----library(ggh4x)library(RColorBrewer)strip <- strip_themed(  background_x = elem_list_rect(fill = brewer.pal(9, "Paired")))## 可视化----p1 <- 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() +   RotatedAxis()+  theme(strip.text.x = element_text(size = 8),        axis.text.x = element_text(color="black",size=10),        axis.title = element_blank(),        strip.background = element_rect(color = "white"),        axis.text.y = element_blank()) +   scale_color_gradient(low = "#ffffff",                       high = "firebrick3",                        name = "avg.exp")p1

这样就得到了带有背景颜色图例的结果,为了简洁将左边的细胞亚群标签信息使用axis.text.y = element_blank()不进行展示,当然我们也可以调整之后,将y轴的图例加上

图片

3. 整理y轴标签
## 图例信息----library(ggplot2)df <- data.frame(x = 0, y = levels(pbmc), stringsAsFactors = F )df$y <- factor(df$y, levels = df$y )#通过shape选择自己想要的图例形状p2 <- ggplot(df, aes(x, y, color = factor(y))) +  geom_point(size = 6, shape = 18, 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()  )p2

选择了shape=18的实心菱形

图片

然后将整理好的图例和点图拼接到一起即可

library(cowplot)plot_grid(p2, p1, align = "h", axis="bt", rel_widths = c(1.5, 9))

图片

小结

这期基于ggplot2在Dotplot结果的基础上进行调整,以及提取Dotplot的结果数据,使用ggplot2进行美化和可视化

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。