SCI级别的箱线图—带有差异检验p值的箱线图绘制
{ 点击蓝字,关注我们 }
我们在生物信息分析过程中经常看到箱线图(Box Plot), 它是由一组或多组连续型定量数据的最小观测值、第一四分位数、中位数、第三分位数和最大观测值来反映数据的分布情况的统计图。箱线图在生信果的其他推文已经有详细介绍了,这里小师妹给大家带来进阶的教学,将细节的地方完善,绘制出漂亮简洁的SCI级别的箱线图,大家下面赶紧跟着小师妹绘制这样的箱线图吧!
首先我们需要一个数据集,小师妹这里用随机数生成了一个符合绘制箱线图的数据,大家可以在文末自取,接下来就打开你的Rstudio实际操作起来吧!
加载所需要的包和数据
rm(list = ls())#清除环境中的变量
library(ggplot2)
library(ggpubr)
library(viridis)
data <- read.csv("data.csv")#读取数据
head(data)#查看数据的前几行
data数据包括五列:Gender,Weight,Age,Tumorsize,Group,即五个变量,其中Gender是分类变量,有male和female两个分类水平,Group也是分类变量,但是有A,B,C三个分类水平,Weight,Age和Tumorsize是三个连续变量。这就是小师妹为大家练习提供的数据,当然大家也可以自己添加,比如添加有四个分类水平的分类变量。
大家知道了数据的构成之后就可以直接开始绘图了,当然这里小师妹是为大家提供了一个十分标准的数据,大家在实际分析过程中是很难遇到这样标准的数据的,可能还需要对数据处理之后才能开始进行绘图分析,比如去除异常值,空白值,这些后面有机会小师妹会为大家提供教程。
###绘制Gender和Weight的箱线图
q1 <- ggboxplot(data, x = "Gender", y = "Weight",
color = "Gender", palette = c("#00AFBB", "#E7B800", "#FC4E07")
ylab = "Weight", xlab = "Gender",#x轴和y轴名称
add = "jitter",add.params = list(size = 0.3),width = 0.5)+ #添加散点
stat_compare_means(method = "wilcox.test",size=5)+
theme(legend.position = 'none',
text = element_text(size = 18,family = "sans"),
axis.text.x = element_text(family="sans",size=20),
axis.text.y = element_text(family="sans",size=20))#去除图例,调整字体大小
q1
其中ggboxplot就是绘制箱线图的函数,自变量是Gender,因变量是Weight,颜色color是按照Gender分类的,palette调色板这里小师妹设置了三个比较好看的颜色,由于Gender只有两个分类,因此只使用了前两个颜色。同时小师妹add了散点,还调整了散点的大小和散点分布的宽度(小师妹这儿的设置在保存为PDF之后会很好看)。这里小师妹使用stat_compare_means()函数添加了wilcoxon检验的p值。下面是这段代码生成的图:
这里我们对于这个检验的p值并没有进行控制格式,如果有小伙伴想要更加高级地添加这个p值可以把
stat_compare_means(method = "wilcox.test",size=5)
修改为:
stat_compare_means(method = "wilcox.test",aes(label = sprintf("p = %4.3f", as.numeric(..p.format..))),label.x = 1,label.y=85,size=5,family="sans")
这里我们把这个注释的位置调整到了(1,85),当然这个可以根据数据分布范围的实际情况调整,设置了其字体和大小,并且去掉了前面的Wilcoxon,只保留了p值,并且p值是格式化输出了,保留了三位小数:
###绘制Group和Age的箱线图
data$Group <- factor(data$Group, levels = c("A","B","C"))#转换成因子变量
q2 <- ggboxplot(data, x = "Group", y = "Age",
color = "Group", palette = c("#00AFBB", "#E7B800", "#FC4E07"),
ylab = "Age", xlab = "Group",
add = "jitter",add.params = list(size = 0.3),width = 0.5)+
stat_compare_means(method = "kruskal.test",aes(label = sprintf("p = %4.3f", as.numeric(..p.format..))),
label.x = 1,label.y=85,size=5,family="sans")+
theme(legend.position = 'none',
text = element_text(size = 18,family = "sans"),
axis.text.x = element_text(family="sans",size=20),
axis.text.y = element_text(family="sans",size=20))
q2
这里我们首先将Group转换为了因子,让它具有A,B,C的顺序,不这样做的话绘制出来的图像横坐标顺序将会是A,C,B。
绘图部分只需要将x,color和xlab改为Group,stat_compare_means()的methon改为kruskal.test(小师妹在其他推文里面介绍过多个分类变量应该用kruskal.test检验),绘制出来的图像有三个箱线图:
最后我们把绘制的两幅图保存为PDF:
ggsave("Gender vs Weight.pdf", q1, device = "pdf",width = 3, height = 4)
ggsave("Group vs Weight.pdf", q2, device = "pdf",width = 3, height = 4)
小师妹这里只使用了Weight这个连续变量和两个分类变量进行了绘图,大家可以用另外两个连续变量自己独立练习一下绘图。
好啦,这就是小师妹SCI级别箱线图绘制教程的全部内容,这次的代码比较复杂和难以理解,但是绘制的图像看起来很漂亮,希望大家可以仔细研究~有需要代码的添加师妹微信哟~
1
END
1