在文献中,我们经常能够看到这样的散点图。例如,通过RNA-seq或qPCR比较特定基因在不同分组样本中的整体表达水平。
文献中的蜂群图
与其称它们为散点图,其实它们是有独自名字的—蜂群图。当然原则上它们仍属于散点图的范畴,因为它仍将单个样本直接显示为点。但其特别之处在于,蜂群图采用了一种逻辑,以确保所绘制的点彼此靠近且不会重叠,并能有效呈现出点分布的局部密度信息,直观而不失优雅。
在反映密度分布的整体趋势上,蜂群图也类似箱线图或提琴图。相比之下,蜂群图本身由单个样本点组成,因此除了能够描述整体,还能比较局部,可以说内容更详细。
蜂群图和提琴图或箱线图的比较
本篇教程教大家如何使用R语言绘制蜂群图。示例数据和R代码等,可添加微信公众号获取。
示例文件
首先来看提供的示例数据,用Excel打开后,内容如下。
这是在某肿瘤研究中,评估基因RNF25在肿瘤和正常组织间是否存在表达水平的差异。其中samples为来源组织样本的编号,group指示了该样本来源于肿瘤(Tumor)或者正常(Normal)组织,RNF25为基因RNF25在各样本中的相对表达值。
示例数据
常规散点图和蜂群图的比较
那么,蜂群图有什么优势,为什么选择它,和常规的散点图之间具体存在哪些区别呢?不妨对比下就知道了。
我们以ggplot2的方法为例,简单展示作图过程。
!!!**************************************************
library(ggplot2)
library(ggbeeswarm)
#常规散点图,使用 geom_point()
ggplot(dat, aes(group, RNF25)) +
geom_point(aes(color = group))
#抖动点图,使用 geom_jitter()
ggplot(dat, aes(group, RNF25)) +
geom_jitter(aes(color = group))
#蜂群图,使用 geom_beeswarm()
ggplot(dat, aes(group, RNF25)) +
geom_beeswarm(aes(color = group))
!!!**************************************************
常规散点图、抖动点图和蜂群图的简单对比
从左到右,依次是常规的散点图、抖动点图和蜂群图。
可以看到,常规的散点图只简单表示了二维信息,各分组中各个样本的RNF25基因表达值。样本点仅仅是简单地竖直堆叠在一起,虽表示出了两组样本的整体表达格局,但无法给出哪些区域的点更为集中(局部分布)。
抖动点是为了减少常规散点图中的点过于重叠而出现的,它将散点适当地往两侧拓展,在一定程度上表示除了局部分布。但是抖动点中点的分布是随机的,因此还是显得比较杂乱。
与前两个散点图相比,蜂群图看着就非常舒服了。既直观描述了两组样本的整体差异,又将局部分布有效呈现出来,样本集中的区域横向分布越长,这样非常有利于我们从中得知大约有多少样本处于哪段表达值区间内。
通过比较,我们也就很清楚地理解了,为什么很多文献中选择使用蜂群图可视化,而不使用普通散点图,因为蜂群图的结构更加清晰直观。
进一步润色
选择绘制蜂群图,最后让它好看一点,通过ggplot2的一些语法做些调整,参考以下示例。
!!!**************************************************
#蜂群图,添加一些参数美化
p <- ggplot(dat, aes(group, RNF25, color = group)) +
geom_beeswarm(cex = 1.5, show.legend = FALSE) + #cex 可以通过点的尺寸定义宽度
scale_color_manual(values = c('orange', 'green4')) + #颜色自定义赋值
theme(panel.grid = element_blank(), panel.background = element_blank(),
axis.line = element_line(color = 'black')) + #去除默认的背景色、边框等
labs(x = '', y = 'RNF25') #坐标轴标签
p
!!!**************************************************
适当调整后的蜂群图
这回看上去更加美观舒服了是不是?
考虑到蜂群图中,点的密度分布状态所指示的信息和提琴图、箱线图等很为相似,因此也可以选择从中找到中位数、上四分位数和下四分位数的位置,以横线表示出来。
!!!**************************************************
#添加中位数,上、下四分位数指示线
p + stat_summary(fun.y = median, fun.ymin = median, fun.ymax = median,
geom = 'crossbar', width = 0.3, size = 0.5, color = 'black') +
stat_summary(fun.data = function(x) median_hilow(x, 0.5),
geom = 'errorbar', width = 0.25, color = 'black')
!!!**************************************************
蜂群图中添加分位数线
这样,数值分布、局部密度以及分位数范围等信息就一致地通过蜂群图展示出来了,完美,可以开开心心往文章中摆了。您心动了吗?
!
!
!
注:!!!*******之间为R脚本内容。
转自:纪伟讲测序- 本文固定链接: https://maimengkong.com/image/1102.html
- 转载请注明: : 萌小白 2022年7月8日 于 卖萌控的博客 发表
- 百度已收录