多组比较式箱线图
在科研论文绘图中,对于多组数据进行比较一般采用箱线图的方法,今天分享一下这个经典数据可视化方法,从零开始绘制一张带误差棒并自动计算显著性比较结果的箱线图。
前言:箱线图有什么优势?
- 数据分布信息:
箱线图能够直观地展示数据的分布情况,包括数据的中位数、上下四分位数和离群值。
- 离群值检测:
箱线图可以帮助识别离群值,即与其他观测值明显不同的极端值,论文中使用箱线图可以帮助研究人员和读者快速识别和评估离群值的影响。
- 比较分组数据:
箱线图可以同时显示多个组或条件的数据分布情况,使得不同组之间的比较更加直观,进而进行统计推断和假设检验。
- 可视化简洁性:
箱线图以简洁直观的方式呈现数据分布,不需要过多的图形元素和细节。
箱线图的绘制方法
载入R包与数据
library(tidyverse) library(ggsignif) library(ggsci) library(ggpubr) # 使用随机测试数据 df <- data.frame( group = rep(c("A", "B", "C","D","E"), each = 20), value = c(rnorm(20, mean = 5, sd = 2), rnorm(20, mean = 7, sd = 1.5), rnorm(20, mean = 8, sd = 2), rnorm(20, mean = 4, sd = 1), rnorm(20, mean = 4.7, sd = 1.2))) #使用自己的数据 df <- read.table("data.txt",header = T)
绘图所用数据很简单,分成两列,第一列是分组信息,第二列是具体的数值,如下所示:
> head(df) group value 1 A 7.442960 2 A 3.582090 3 A 5.422412 4 A 3.891454 5 A 6.129032 6 A 3.011515
ggplot2绘图
使用以下代码即可绘制出一张箱线图,附带显著性标注和误差棒,直接可以放在论文中进行使用。
ggplot(df,aes(group,value))+ stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1), geom = "errorbar", width = 0.1, size=0.8, alpha=0.7)+ geom_boxplot(aes(fill=group),coef = 1000000)+ geom_signif( comparisons = list( c("A","B"), c("D","E") ), map_signif_level = T, test = "t.test", vjust=0.1, tip_length = 0.02 )+ labs(x = "",y = "Value")+ ylim(0,13)+ theme_bw()+ theme( legend.position = "none", axis.title = element_text(size = 15,face = "bold"), axis.text.x = element_text(size = 12,color = "black"), axis.title.y = element_text(size = 12,color = "black") ) ggsave("test.pdf",width = 10,height = 4)
代码原理解释
ggplot(df, aes(group, value))
创建一个基础的ggplot对象,其中df是数据框,group和value是数据框中的两个变量,用于指定x轴和y轴的数据。
stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1), geom = "errorbar", width = 0.1, size = 0.8, alpha = 0.7)
使用stat_summary函数对数据进行汇总统计,并绘制误差线。mean_sdl是用于计算均值和标准差的函数,fun.args参数用于传递给mean_sdl函数的参数,geom参数指定使用误差线图形,width参数指定误差线的宽度,size参数指定误差线的线条粗细,alpha参数指定误差线的透明度。
geom_boxplot(aes(fill = group), coef = 1000000)
使用geom_boxplot函数绘制箱线图,并根据group变量对箱线图进行分组。fill参数用于指定组别的填充颜色,coef参数用于调整箱线图的宽度。
geom_signif(comparisons = list(c("A", "B"), c("D", "E")), map_signif_level = T, test = "t.test", vjust = 0.1, tip_length = 0.02)
使用geom_signif函数在图形中添加显著性标记。comparisons参数指定要比较的组别,map_signif_level参数指定是否映射显著性水平,test参数指定使用的统计检验方法,vjust参数指定标记的垂直位置,tip_length参数指定标记的长度。
labs(x = "", y = "Value")
添加x轴和y轴的标签,其中x轴标签为空字符串,y轴标签为"Value"。
ylim(0, 13)
设置y轴的坐标范围为0到13。
theme_bw()+ theme(legend.position = "none", axis.title = element_text(size = 15, face = "bold"), axis.text.x = element_text(size = 12, color = "black"), axis.title.y = element_text(size = 12, color = "black"))
设置图形的主题样式为白色,其中legend.position参数设置图例的位置为"none",axis.title参数设置坐标轴标题的样式,axis.text.x参数设置x轴标签的样式,axis.title.y参数设置y轴标题的样式。