多组差异分析的可视化,这样做最省心!

欢迎关注”生信修炼手册”!

下图是来自文献中的一个示例图,展示了不同亚型之间risk score值的差异分析结果

285f7025a5d847dc0b508d0b503a36eb.png

从图形的主题可以看出,这是一幅基于ggplot2绘制的图片,但是如果完全基于ggplot2的基础函数的话,我们需要手动绘制组间比较的连线,计算对应的坐标并添加p值,虽然也可以实现,但不免太过繁琐。

想要更加便利的展示组间差异的结果,可以使用ggpubr这个R包。这是一个基于ggplot2的拓展包,体用了丰富的可视化功能,差异标记的可视化仅仅是其功能之一。

首先来看下其基本用法,代码如下

> library(ggpubr)
载入需要的程辑包:ggplot2
Want to understand how all the pieces fit together? Read R for Data
Science: https://r4ds.had.co.nz/
> data("ToothGrowth")
> df <- ToothGrowth
> head(df, 4)
   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
> ggviolin(df, x = "dose", y = "len", fill = "dose",add = "boxplot", add.params = list(fill = "white"))

ggviolin函数提供了小提琴图的可视化功能,通过add=boxplot在小提琴图的基础上添加了箱体图,效果图如下

c109241ea40630349dfd6c2b7958ad40.png

接下来添加差异分析的p值, 代码如下

> ggviolin(+   df, x = "dose", y = "len",
+   fill = "dose",
+   add = "boxplot",
+   add.params = list(fill = "white")) +
+ stat_compare_means()

stat_compare_means函数添加差异分析的p值,默认参数的情况下,添加组间kw检验的结果,效果图如下

3231915e2745c4e5f12e5a774a1e8ac3.png

也可以手动指定需要标记的分组,代码如下

> ggviolin(
+   df, x = "dose", y = "len",
+   fill = "dose",
+   add = "boxplot",
+   add.params = list(fill = "white")) +
+ stat_compare_means(comparisons = list(c("0.5", "1")))

程序会自动计算坐标,标记p值,效果图如下

a90c6329e601127e9ad6b8d636c3c1f7.png

需要注意的是,当涉及到多组间的两两比较时,写法上比较特殊,对于3组间的两两比较,我们先看下每次指定一组差异分析的情况,代码如下

> ggviolin(
+   df, x = "dose", y = "len",
+   fill = "dose",
+   add = "boxplot",
+   add.params = list(fill = "white")) +
+ stat_compare_means(comparisons = list(c("0.5", "1"))) +
+ stat_compare_means(comparisons = list(c("1", "2"))) +
+ stat_compare_means(comparisons = list(c("0.5", "2")))

效果图如下

943c6d268cbefab85a4f61a2a60af645.png

可以看到,程序没有自动化的计算3组p值的位置,导致重叠了,为了避免这种情况,我们需要下列这种写法

> ggviolin(
+   df, x = "dose", y = "len",
+   fill = "dose",
+   add = "boxplot",
+   add.params = list(fill = "white")) +
+ stat_compare_means(comparisons = list( c("0.5", "1"), c("1", "2"), c("0.5", "2") ))

需要把3组差异分组包含在一个list中,这样程序就会自动计算标记p值的位置,将3组p值自动化的区分开,效果图如下

3df9b5311528a7061eaf20bfe176d954.png

除了直接标记p值外,也支持用星号代替,将代码如下

> ggviolin(
+   df, x = "dose", y = "len",
+   fill = "dose",
+   add = "boxplot",
+   add.params = list(fill = "white")) +
+ stat_compare_means(
+   label = "p.signif",
+   comparisons = list( c("0.5", "1"), c("1", "2"), c("0.5", "2"))
+ )

效果图如下

b1688029bce78678ada3c71e9bbdde01.png

最后,来看一个官网的示例,看下以上所有参数组合使用的例子,代码如下

> comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )
> ggviolin(
+   df, x = "dose", y = "len", fill = "dose",
+   palette = c("#00AFBB", "#E7B800", "#FC4E07"),
+   add = "boxplot", add.params = list(fill = "white")) +
+   stat_compare_means(comparisons = my_comparisons, label = "p.signif") +
+   stat_compare_means(label.y = 50)

效果图如下

8e68a722204fd148b9439f570f266b4f.png

掌握了以上用法,绘制文章开头的那张图片就不在是难事了。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

  更多精彩

  写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

1d9fa6ca9397da98a60e13b078912030.png

一个只分享干货的

生信公众号


版权声明:本文为weixin_43569478原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。