最初小编是在“A genome-based model for adjusting radiotherapy dose (GARD): a retrospective, cohort-based study”这篇文章中看到的一个图。
它形似一张提琴图,展示了来自不同类型疾病患者个体的GARD得分的分布,图中红色点代表了中位数。但与常规提琴图不同的地方在于,提琴图中还添加了密度信息,即数值分布更多区域颜色更为明显。尽管提琴图的宽度足以代表数值的分布区间了,颜色的添加使其更为丰富多彩。
文献插图 图2
本节内容,就让小编来讲一下这种“密度提琴图”如何在R中绘制。
其实,如果从提琴图的角度出发,即首先绘制一个提琴图,然后设法在其中标识出密度,则该图是很难实现的。这点小编深有体会,好几个人折腾了老半天也没能成功地在提琴图中设置密度颜色。
因此,我们需要换个角度思考该图的绘制方法。设想一下,既然要表示密度,那么首先不妨绘制一个密度分布图观测数据。
!!!**************************************************
#绘制密度分布图
library(ggplot2)
library(ggridges)
#lincoln_weather是来自ggridges包的数据,详情输入 ?lincoln_weather 查看数据说明
p1 <- ggplot(lincoln_weather, aes(x = `Mean Temperature [F]`, y = `Month`, fill = ..density..)) +
geom_density_ridges_gradient(scale = 0.5, gradient_lwd = NA, rel_min_height = NA,size = NA) +
scale_fill_gradientn(colours = colorRampPalette(c('#663490', '#5054A3', '#37A3D2', '#3EB897', '#6EBB46', '#C0D857'))(30)) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'), plot.background = element_blank()) +
labs(x = 'Mean Temperature', y = 'Month', fill = '')
p1
!!!**************************************************
密度分布图
有没有什么感触呢?
对的没错,密度提琴图可以视为两张“相反方向”的密度分布图的叠加。因此,我们再绘制一个反方向的。
!!!**************************************************
#“反方向”的密度分布图
#既然为了后续叠加图做准备,那么就不要带任何背景
p2 <- ggplot(lincoln_weather, aes(x = `Mean Temperature [F]`, y = `Month`, fill = ..density..)) +
geom_density_ridges_gradient(scale = -0.5, gradient_lwd = NA, rel_min_height = NA,size = NA) +
scale_fill_gradientn(colours = colorRampPalette(c('#663490', '#5054A3', '#37A3D2', '#3EB897', '#6EBB46', '#C0D857'))(30)) +
theme(panel.grid = element_blank(), panel.background = element_blank(), plot.background = element_blank()) +
labs(x = 'Mean Temperature', y = 'Month', fill = '')
p2
!!!**************************************************
反转方向的密度分布图
最后,将两张图组合在一起,就获得密度提琴图了,是不是?
同时,也计算各个变量的中位数,并以红点的形式标注在图中。
!!!**************************************************
#计算中位数值
med <- aggregate(lincoln_weather$`Mean Temperature [F]`, by = list(lincoln_weather$`Month`), FUN = median)
#把中位数以红点的形式添在图中
p2 <- p2 +
annotate('text', label = '.', x = med$x, y = med$Group.1, size = 10, colour = 'red', vjust = -0.02)
#组合上下两张图获得密度提琴图
library(grid)
grid.newpage()
print(p1, vp = viewport(x = 0.5, y = 0.5))
print(p2, vp = viewport(x = 0.5, y = 0.5))
!!!**************************************************
两个密度分布图,组合成密度提琴图
这样,密度提琴图就画好了。和常规的提琴图相比,它是不是更漂亮呢?
!
!
!
注:!!!*******之间为R脚本内容
转自纪伟讲测序- 本文固定链接: https://maimengkong.com/image/1074.html
- 转载请注明: : 萌小白 2022年6月30日 于 卖萌控的博客 发表
- 百度已收录