一文搞懂 R 軟體的 boxplot

2021-12-10 EcologyData

收錄於話題 #數據作圖 17個內容

最近一周一直在出差,包括今天,比較忙,更新少,這幾天看了幾篇文章,都使用了箱線圖,這裡索性將 Base plot 語法的箱線圖畫法總結一下。

什麼是 boxplot

boxplot 我們通常翻譯為箱線圖,最初來自於數學家 John Tukey,正式名稱為 「Box and Whisker Plot」,最初的目的是將其用於所謂的五數概括法(five numbers summary),我們直接上圖:

1boxplot(
2  airquality$Ozone,
3  horizontal = TRUE,
4  col = NA,
5  axes = FALSE
6)
7arrows(1.08,  1.1, 10, 1.4, code = 1)
8text(11, 1.43, "最小值", cex = 0.6)
9
10arrows(18.5,  0.79, 13.5, 0.55, code = 1)
11text(14.5, 0.55, "四分之一位點", cex = 0.6)
12
13arrows(31.87,  1.2, 61.87, 1.43, code = 1)
14text(65, 1.48, "中位數", cex = 0.6)
15
16arrows(63.63,  0.8, 90, 0.69, code = 1)
17text(93, 0.59, "四分之三位點", cex = 0.6)
18
19arrows(122.88,  1, 96.5, 1.24, code = 1)
20text(97,  1.3, "最大值", cex = 0.6)
21
22rect(
23  xleft = 130,
24  xright = 174,
25  ybottom = 0.8,
26  ytop = 1.2,
27  lty = 2
28)
29text(150, 0.75, "異常值", cex = 0.6)

 

這裡解釋一下:

boxplot 實際上是顯示的四分位數(IQR),我們分別用:

表示四分位數的各個間隔點,也就是四分之一位點,中位數,以及四分之三位點。

這裡的異常值(outlier)的定義則為:

我沒找到合適的數據,顯示左側的異常值,我又懶得造數,所以上圖只顯示了右側的異常值數據。在上面的最大最小值的標記位置需要注意,它們是在異常值不參與計算的情況下得到的,boxplot 也有一個參數,表示為 outline = TRUE 來顯示上圖中我們用虛線框框起來的異常值。

notch = TRUE

 

1boxplot(
2  airquality$Ozone,
3  horizontal = TRUE,
4  col = NA,
5  axes = FALSE,
6  notch = TRUE,
7  outline = FALSE
8)
9
10rect(
11  xleft = 24.4,
12  xright = 38.8,
13  ybottom = 1.198,
14  ytop = 1.398,
15  lty = 2
16)
17text(31.6,
18     1.498,
19     '中位數的 95% 置信區間',
20     cex = 0.6)
21
22rect(
23  xleft = 18.24,
24  xright = 63.55,
25  ybottom = 0.793,
26  ytop = 0.593,
27  lty = 2
28)
29
30text(40.9,
31     0.493,
32     '50% 的數據',
33     cex = 0.6)

notch 表示是否顯示中位數的 95% 置信區間,也就是上圖中自左至右的虛線框的長度範圍,而

這個虛線框的的長度則表示了 50% 數據的範圍。

按不同分組作圖

例如,按月份顯示溫度數據(主要是不同季節溫差大):

 

1cls <- palette.colors(6)[2:6]
2airquality$Temp <- (airquality$Temp - 32) * 5 / 9
3
4boxplot(Temp~Month,
5        data = airquality,
6        col = cls,
7        border = 'brown'
8        )

如果實際的數據點並不多,那麼可添加實際的數據點:

1with(airquality,
2     {
3       Month <- as.factor(Month)
4       n_each = table(Month)
5       cls2 <- unlist(mapply(rep, cls, time = n_each))
6
7       boxplot(Temp~Month,
8               col = NA,
9               outline = FALSE)
10       points(Temp~Month, pch = 19, col = cls2)
11     }
12     )

當然,Base R 提供了另外的一個解決方案,除此以外,還可以使用小提琴形狀,優勢就是能夠體現數據點的分布:

1library(vioplot)
2with(airquality,
3     {
4       vioplot(Temp ~ Month,
5               col = "gray"
6       )
7       stripchart(
8         Temp ~ Month,
9         pch = 19,
10         # colors do not need rep,
11         # formula distribute them to each group
12         col = cls,
13         vertical = TRUE,
14         method = "jitter",
15         jitter = 0.02,
16         add = TRUE
17       )
18     })


 

 

stripchart 本身就是作為 boxplot 的另一種形式,還提供了數據點輕微的抖動功能,方便我們更好的查看數據點,而小提琴圖則比使用矩形圖更加直觀的反應點的分布情況,在某些情況下,更適合使用,ggplot2 提供了很方便的功能來實現這幅圖,但是我還是喜歡這種 Base R 的語法來實現。

排序功能

很多時候我們希望對數據重新排序,例如從高到底或從低到高來實現圖形的有序排列,這個我們可以通過使用 reorder 對中位數排序後作圖來實現,例如:


1with(airquality,
2     {
3       q2 <- reorder(Month, Temp, median)
4       boxplot(Temp~q2,
5               col = cls,
6               border = 'brown'
7       )
8     }
9)

reorder對因子的重新排序非常方便,儘管這裡可能因為月份,並不適合這種形式,但是遇到確實需要這種排列方式的作圖,則很輕鬆可以實現。

boxplot 數據

如同 hist 函數一樣,boxplot 同樣能返回作圖的數據使用方式很簡單,就是將作圖命名:

1x <- boxplot(Temp~Month, data = airquality)
2x
3

1## $stats
2##          [,1]     [,2]     [,3]     [,4]     [,5]
3## [1,] 13.33333 19.44444 26.66667 22.22222 17.22222
4## [2,] 15.55556 24.44444 27.50000 26.11111 21.66667
5## [3,] 18.88889 25.55556 28.88889 27.77778 24.44444
6## [4,] 20.55556 28.33333 30.00000 31.38889 27.22222
7## [5,] 27.22222 33.88889 33.33333 36.11111 33.88889
8## 
9## $n
10## [1] 31 30 31 31 30
11## 
12## $conf
13##          [,1]     [,2]     [,3]     [,4]     [,5]
14## [1,] 17.47001 24.43374 28.17945 26.28007 22.84185
15## [2,] 20.30777 26.67737 29.59833 29.27549 26.04704
16## 
17## $out
18## [1] 18.33333 22.77778 23.33333
19## 
20## $group
21## [1] 2 3 3
22## 
23## $names
24## [1] "5" "6" "7" "8" "9"

$stats 表示 IRQ 的各個位點和極值(按列排序,R 的 array 基本原則),例如第一列表示五月的最小值,Q1, Q2, Q3 以及最大值

n 表示各個分組或者各個 box 的數據點的數量(不包含 NA)

conf 表示 notch 的上下限的極值

out 表示 outlier 異常值

group 並非表示簡單的分組,而是表示上面的 outlier 點中,各個點屬於哪個分組,例如第二分組一個 outlier,第三個分組兩個,所以此處數據為 2,3,3。

names 真正的各個分組的名字,也就是此處的月份

參考資料

https://chartio.com/resources/tutorials/what-is-a-box-plot/#:~:text=A%20Box%20Plot%20is%20the%20visual%20representation%20of,%E2%80%9CFive%20Number%20Summary%E2%80%9D%20of%20any%20given%20data%20set

https://r-coder.com/boxplot-r/

https://www.datamentor.io/r-programming/box-plot/

相關焦點

  • R語言作圖實例之boxplot
    boxplot 示例圖,圖片來源於網絡 在常用的生物信息相關統計分析中,比較常見的是boxplot,因為它可以有效地生成數據的分布圖,給出在各個數據集中,數據的基本信息,同時也便於比較不同變量集合。我們通過下面一個小的應用實例,給出生成boxplot的一種比較有效的方法,生成的圖形也較為生動,這一程序可以用於結構比較類似的數據集,生成相應的boxplot。在本文的講解中,我們使用了網上的公共資料庫,數據來源:github讓我們先一睹為快,看看最後的圖形是什麼樣的:
  • R繪圖之箱線圖(boxplot)
    箱線圖是一種基於五個統計量:上邊緣,上四分位數Q3,中位數,下四分位數Q1和下邊緣,來顯示數據分布的統計圖。:(顯示為綠色圓圈)     我們還是以上一篇的數據mtcars為例,繪製boxplot。先做好準備工作:###加載要使用的包library(ggplot2)  library(RColorBrewer)###獲取自定義顏色colset <- brewer.pal(3,"Set1") ##brewer.pal選擇顏色的最小種類是3###將變量vs設置成factormtcars$vs<- factor(mtcars
  • R語言學習第6天-boxplot()繪製盒須圖
    setwd("E:/R-work/R語言學習第6天-boxplot")trans<-read.table("transcript_exp_log2FPKM.txt",header=T,row.names=1,sep="\t")
  • R語言中使用boxplot函數繪製箱線圖
    R中繪製箱線圖的函數boxplot(1)基本用法boxplot(x, ...)(2)公式形式的用法boxplot(formula, data = NULL, ..., subset, na.action = NULL, drop = FALSE, sep = ".
  • 醫學統計R語言:分面畫boxplot
    library(foreign) sp <- read.spss("q.sav",to.data.frame=T,                  use.value.lables=T,reencode='utf-8')ggplot(sp,aes(x=newsleeptime,y=cryl,fill=newage,color=newage))+      geom_boxplot
  • R語言50繪圖|第六期boxplot()展示組間差異
    今天帶來《R語言50繪圖》系列第六期~今天就和大家分享一下:boxplot()展示組間差異~使用ggboxplot()函數來展示組間差異。group=levels(factor(rt$Type))rt$Type=factor(rt$Type, levels=group)comp=combn(group,2)my_comparisons=list()for(i in 1:ncol(comp)){my_comparisons[[i]]<-comp[,i]}boxplot
  • 用R畫boxplot+dotplot+violinplot+jitter及代碼
    BioNews,專注於報導生命科學領域相關新聞,長按下方二維碼即可關注"BioNews"(id : iBioNews)我們在想要展示我們的科研成果的時候經常會需要用到一些圖,其中boxplot,dotplot,violinplot和jitter等是我們經常要用到的圖,那我們會畫單個圖後如何把這些圖整合到一張圖上呢,下面小編就給大家介紹。
  • R語言50繪圖|第八期boxplot()展示基因在多組間的差異
    今天帶來《R語言50繪圖》系列第八期~今天就和大家分享一下:boxplot()展示基因在多組間的差異~使用ggboxplot()函數來展示基因在多組間的差異。同時:使用ggpubr包添加組間比較的P-value,主要利用兩個函數:A)compare_means():可以進行一組或多組間的比較可以通過??
  • 配對樣本t檢驗(Paired Samples t-test)——R軟體實現
    案例介紹二、問題分析三、軟體操作及結果解讀   (一)導入數據   (二)適用條件判斷   (三)統計描述及推斷   (四)相關性分析四、結論為檢測肌肉組織中某生化指標(X)的含量,分別使用A、B兩種方法檢測17隻小白鼠肌肉組織中該生化指標(X)的含量,試問兩種方法檢測的結果是否有差異。
  • 代碼向 |R barplot or boxplot ? 小孩子才選擇,一鍵輸出所有組合
    下面看成果Rscript boxplot-barplot.multi.Group.R -h 參考腳本說明 -i 豐度表,第一列是樣品ID -m 分組信息,第一列是樣品ID -g 繪圖分組信息列名,默認"Group"    -c 分組顏色 默認:1b9e77:d95f02:7570b3:e7298a:66a61e
  • Ggplot2 boxplot parameters
    第七十七題 2021年2月5日Ggplot2 boxplot
  • 箱線圖boxplot的多種畫法
    之前已經給大家簡單介紹過boxplot的繪製(用R做分組boxplot並修改median線顏色同時展示P值),我們今天詳細地再給大家介紹兩種繪製箱線圖的方法。1. 基礎函數boxplot(這個函數是R自帶函數,不需要安裝包)1.1直接調用數據來繪圖set.seed(1)boxplot(rnorm(10),rnorm(10),names= c("rn1","rn2"),col = colors()[10:11])
  • 用R畫韋恩圖,柱狀圖,餅圖,barplot和boxplot和violin
    4.boxplot and violin plot。image.pngboxplot and violin plotggplot(data=data_vio_0.1,aes(x=a,y=V5))+geom_boxplot()
  • 一文讀懂 Gage R&R
    如果你的目的是如何做GRR,那麼你只需要兩點即可: 1)了解如何設計測量過程;2)會使用專門的Excel表或者Minitab 分析軟體進行分析。如果你沒有專門用於GRR的手工表格,或者類似Minitab的分析軟體,推薦嘗試一個在線GRR的計算器。
  • 第十一講:R作圖-ggplot2軟體包快速入門-qplot()函數
    所以我們需要安裝Gmisc軟體包,並導入該軟體包。所以我們需要安裝forestplot軟體包,並導入該軟體包。   weight group1   4.17  ctrl2   5.58  ctrl3   5.18  ctrl4   6.11  ctrl5   4.50  ctrl6   4.61  ctrl·geom =「 boxplot
  • 一文搞懂代數幾何發展史(一)
    本文作者陳躍,原文題目《什麼是代數幾何》,因文章長度限制將文章分成兩部分:第1部分《一文搞懂代數幾何發展史(一)》為20世紀早期及以前的很長一段時間內數學家們對代數簇的深入研究;第2部分《一文搞懂代數幾何發展史(二)》講述從將抽象代數方法引入代數幾何到概形理論的創立這一時期的發現情況。歡迎品鑑,一文搞懂代數幾何發展史。
  • R可視化:基於ggplot2等輕鬆搞定散點+箱線圖
    R(4.1.0版本)語言和Rstudio(1.1.1717版本)R語言和Rstudio軟體,公眾號後臺回復 R語言安裝 獲安裝程序。  na.rm = FALSE,  orientation = NA,  show.legend = NA,  inherit.aes = TRUE)這裡給出了三個繪製箱型圖的必備函數的參數詳細信息,也許不夠全面,但搞懂這些參數就能輕鬆繪製出箱型圖啦,關於另外的一些圖美設置後續進行介紹,下面開始我們的繪圖之旅:使用程序包
  • R與生物專題 |第十二講 R作圖-ggplot2繪製箱式圖
    缺口用於比較組;如果兩個箱式的缺口不重疊,則有力證明中位數不同。## 將可變劑量從數字轉換為因子變量ToothGrowth$dose<-as.factor(ToothGrowth$dose)head(ToothGrowth)len supp dose 1 4.2 VC 0.5 2 11.5 VC 0.5 3 7.3 VC 0.5 4 5.8
  • 如何用R語言畫出漂亮的盒形圖(上) 繽紛燦爛R語言 醫學方R語言高階課程
    既往「繽紛燦爛R語言(R語言高階課程)」推文1.R語言作圖!R語言作圖!R語言作圖!說三遍!!>boxplot(data,range= 1,xlab = 'range is 1')boxplot(data,range= 1.5,xlab= 'range is 1.5')
  • R語言添加p-value和顯著性標記
    結果解釋:   ## 繪製箱線圖p <- ggboxplot(ToothGrowth, x="supp", y="len", color = "supp",palette =可視化ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+stat_compare_means()