「R」数据可视化2 : 箱形图

2019-12-23 572动手实验室

在生物领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包的作图方法,希望能够帮助到各位读者。

什么是箱形图

箱形图(Box-plot)是一种用作显示一组数据分散情况的统计图,因形状如箱子而得名。除了生信领域,该图在其他领域也经常被使用。主要用于反映原始数据分布的特征,并且可以进行多组数据分布特征的比较。箱形图能显示出一组数据的最大值(Maximum)、最小值(Minimum)、中位数(Median)及上下四分位数(1st/3rd Quartile),同时还可以显示逸出值(Outlier)。

箱形图_1

那么,这些值是如何被计算出来的呢?什么样的数据会被判定为逸出值呢?

第一四分位数(Q1),又称较小四分位数,等于该样本中所有数值由小到大排列后第25%的数字。第二四分位数,又称中位数,等于该样本中所有数值由小到大排列后第50%的数字。第三四分位数(Q3)又称较大四分位数,等于该样本中所有数值由小到大排列后第75%的数字。逸出值,是根据四分位间距(interquartile range)进行计算的:四分位间距 = Q3-Q1 = ΔQ 在区间 Q3+1.5ΔQ, Q1-1.5ΔQ 之外的值即被视为逸出值。

箱形图怎么画

(1) 需要什么格式的数据

我们需要的数据只要两列,一列为x,一列为y。本次我们使用R中提供的iris数据。

箱形图_2

这个数据共有5列,分别为花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)以及物种(Species)。比如我们想要探究不同物种的花萼长度差异。

(2) 如何使用ggplot2做箱形图

利用ggplot2画图的核心命令是geom_boxplot。我们先来尝试做一个最最基础也是最丑的boxplot图。

加载包

library(ggplot2)

作图

ggplot(iris,aes(x=Species,y=Sepal.Length))+
geom_boxplot()

箱形图_3

可以看到不同的物种之间Sepal.Length有所不同,那么这种差异显著吗?

这个时候我们就需要做检验,那么如何可以直接把检验结果展示在图中呢。这个时候我们可以使用另一个R包ggpubr。

加载包

library(ggplot2)
library(ggpubr)

作图ggplot(iris,aes(x=Species,y=Sepal.Length,color=Species))+

geom_boxplot()+
theme_bw()+#改变绘图主题
stat_compare_means(aes(label = ..p.signif..),comparisons = list(c('setosa','versicolor'), c('setosa','virginica'),c('versicolor','virginica')))+#添加检验
xlab("")#修改横坐标

箱形图_4

如果将stat_compare_means这部分修改为stat_compare_means(comparisons = list(c('setosa','versicolor'), c('setosa','virginica'),c('versicolor','virginica')))那么默认的作图就不是显示星号而是具体的pvalue值。具体的星号和pvalue的关系如下:ns: p > 0.05: p <= 0.05 *: p <= 0.01: p <= 0.001: p <= 0.0001

同时如果你的检验是成对的那么可以加上参数paired=T,如果你不想用默认的wilcox.test你可以将method改为其他的。比如我想要做一个成对的t检验:stat_compare_means(aes(label = ..p.signif..),method="t.test",paired=T)可以发现这里我没有添加comparisons参数,那么结果就是看三组是否存在两组间有显著差异。具体的大家可以使用命令?stat_compare_means查看帮助手册。

然后我们还可以修改颜色等等。

加载包

library(ggplot2)
library(ggpubr)
library(RColorBrewer)

作图ggplot(iris,aes(x=Species,y=Sepal.Length,color=Species))+ geom_boxplot()+

theme_bw()+#改变绘图主题+
theme(
panel.grid = element_blank(),#去掉背景网格 legend.position = c('none')#去掉图例
)+
scale_color_manual(values=brewer.pal(3,'Set1'))+#修改颜色 stat_compare_means(aes(label = ..p.signif..),comparisons = list(c('setosa','versicolor'), c('setosa','virginica'), c('versicolor','virginica')),method="t.test" )+#添加检验
xlab("")#修改横坐标

箱形图_5

这样,一张简洁的Boxplot图就完成啦。

▍本文版权(包括图片及文字)属于“优雅R”(微信公众号:elegant-r),禁止二次转载,如需转载请联系w_shixiang@163.com部分数据和图片来源于网络,如有版权问题请联系删除。

上一篇下一篇