日更已經是不可能的了,讓我向周更靠齊。本節我們來講箱形圖(Box-plot)。
什么是箱形圖
箱形圖(Box-plot)是一種用作顯示一組數據分散情況的統計圖,因形狀如箱子而得名。除了生信領域,該圖在其他領域也經常被使用。主要用于反映原始數據分布的特征,并且可以進行多組數據分布特征的比較。箱形圖能顯示出一組數據的最大值(Maximum)、最小值(Minimum)、中位數(Median)及上下四分位數(1st/3rd Quartile),同時還可以顯示逸出值(Outlier)。
那么,這些值是如何被計算出來的呢?什么樣的數據會被判定為逸出值呢?
第一四分位數(Q1),又稱較小四分位數,等于該樣本中所有數值由小到大排列后第25%的數字。
第二四分位數,又稱中位數,等于該樣本中所有數值由小到大排列后第50%的數字。
第三四分位數(Q3)又稱較大四分位數,等于該樣本中所有數值由小到大排列后第75%的數字。
逸出值,是根據四分位間距(interquartile range)進行計算的:
四分位間距 = Q3-Q1 = ΔQ
在區間 Q3+1.5ΔQ, Q1-1.5ΔQ 之外的值即被視為逸出值。
箱形圖怎么畫
(1) 需要什么格式的數據
我們需要的數據只要兩列,一列為x,一列為y。本次我們使用R中提供的iris數據。
這個數據共有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()
可以看到不同的物種之間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("")#修改橫坐標
如果將
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("")#修改橫坐標
這樣,一張簡潔的Boxplot圖就完成啦。