R數據可視化2:箱形圖 Boxplot

日更已經是不可能的了,讓我向周更靠齊。本節我們來講箱形圖(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圖就完成啦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。