R语言绘制箱线图示例
箱线图(又称盒须图)是常见的统计图形之一,通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。箱线图能够显示出可能为离群点(范围±1.5×IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测。
默认情况下,两条须的延伸极限不会超过盒型各端加1.5倍四分位距的范围。此范围以外的值以点(即离群点)来表示。
本篇通过分享R语言绘制箱线图的几种常见样式的简单示例,以帮助入门的同学们掌握常规的作图技巧。
作图数据的网盘链接(提取码pmbr):
https://pan.baidu.com/s/1WZ2UzXPGw9M448v-fms6RA
网盘附件“alpha.csv”为某16S细菌群落测序所获得的部分alpha多样性指数数据。其第一列为样本名称;observed_species、shannon、chao1和PD_whole_tree为四种类型的alpha多样性指数,其中的数值代表了各样本中该alpha多样性指数的数值;group1和group2为样本所对应的分组信息。
本篇我们将通过绘制箱线图,展示alpha多样性指数在各分组中的分布概况。
R语言绘制箱线图的简单示例
我们首先将作图数据读到R中,并分别从中挑选部分数据,便于后续绘制不同的样式。
#读取数据library(reshape2)
alpha <- read.csv('alpha.csv', stringsAsFactors = FALSE)
alpha$group2 <- factor(alpha$group2)
alpha1 <- melt(alpha, id = c('samples', 'group1', 'group2'))
alpha2 <- subset(alpha1, variable == 'chao1')
alpha3 <- subset(alpha2, group1 == 'c')
boxplot()箱线图
R启动时默认加载了boxplot()命令,可用于绘制箱线图。我们使用boxplot()绘制箱线图展示chao1指数在c分组中的分布,如下示例。
##boxplot() 箱线图,详情使用 ?boxplot 查看帮助par(mfrow = c(1, 2))
#常规样式
boxplot(value~group2, data = alpha3, col = '#f8766d', ylab = 'Chao1 (group c)')
#根据数据分布,添加凹槽
boxplot(value~group2, data = alpha3, col = '#f8766d', notch = TRUE, varwidth = TRUE, ylab = 'Chao1 (group c)')
ggplot2绘制箱线图
ggplot2功能强大自然不必多说,以下继续展示使用ggplot2绘制箱线图的示例。
##ggplot2library(ggplot2)
#单变量箱线图
ggplot(alpha3, aes(x = group2, y = value)) +
geom_boxplot(outlier.size = 1, fill = '#f8766d') +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black')) +
labs(x = '', y = 'Chao1')
ggplot(alpha3, aes(x = group2, y = value, fill = group1)) +
geom_boxplot(fill = '#f8766d', notch = TRUE) +
geom_jitter(color = 'red', show.legend = FALSE) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black')) +
labs(x = '', y = 'Chao1 (group c)')
ggplot(alpha2, aes(x = group2, y = value, fill = group1)) +
geom_boxplot(outlier.size = 1) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'), legend.title = element_blank(), legend.key = element_blank()) +
labs(x = '', y = 'Chao1')
ggplot(alpha1, aes(x = group2, y = value, fill = group1)) +
geom_boxplot(outlier.size = 0.5, size = 0.5) +
facet_wrap(~variable, 2, scales = 'free') +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'), legend.title = element_blank(), legend.key = element_blank()) +
labs(x = '', y = 'Chao1')
#先绘制箱线图主体
p <- ggplot(data = alpha2, aes(x = group2, y = value, fill = group1)) +
geom_boxplot(outlier.size = 1) +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'), legend.title = element_blank(), legend.key = element_blank()) +
labs(x = '', y = 'Chao1')
#再手动添加显著性标记
#注意,这里的显著性是提前已经计算好的,我们通过手动输入进来
#本篇只关注作图,不涉及统计分析
library(doBy)
alpha2_stat <- summaryBy(value~group2, alpha2, FUN = max)
names(alpha2_stat) <- c('group2', 'value')
alpha2_stat$group1 <- NA
alpha2_stat$sig <- rep('***', 5)
p + geom_text(data = alpha2_stat, aes(label = sig), vjust = -0.3) +
annotate('text', x = alpha2_stat$group2, y = alpha2_stat$value, label = '———', vjust = -0.3)
#先绘制箱线图主体
p <- ggplot(data = alpha1, aes(x = group2, y = value, fill = group1)) +
geom_boxplot(outlier.size = 0.5, size = 0.5) +
facet_wrap(~variable, 2, scales = 'free') +
theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'), legend.title = element_blank(), legend.key = element_blank()) +
labs(x = '', y = 'Chao1')
#再手动添加显著性标记
#同上所述,这里的显著性是提前通过差异分析已经计算好的,我们通过手动输入进来
alpha1_stat <- summaryBy(value~group1+group2+variable, alpha1, FUN = max)
names(alpha1_stat) <- c('group1', 'group2', 'variable', 'value')
alpha1_stat$sig <- c('a', 'a', 'a', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'a', 'b', 'b', 'a', 'b', 'c', 'c', 'b', 'a', 'a', 'b', 'a', 'a', 'a', 'b', 'a', 'a', 'a', 'a', 'a')
p + geom_text(data = alpha1_stat, aes(label = sig, color = group1), position = position_dodge(1), vjust = -0.3)
好了,以上就是本篇的内容,大致简介了几种简单的箱线图在R中的绘制示例,以帮助刚接触R的同学们入门,get到了吗?
R包rcompanion执行非参数双因素方差分析(Scheirer-Ray-Hare检验)
R语言执行非参数单因素方差分析(Kruskal-Wallis检验、Friedman检验)