本文作者蔣劉一琦,自嘲是一個有藝術追求的生信狗,畢業於浙江大學生物信息學專業,目前在復旦大學就讀研究生,研究方向為宏基因組。
在生物信息領域我們常常使用R語言對數據可視化。在對數據可視化的時候,我們需要明確想要展示的信息,從而選擇最為合適的圖突出該信息。
本系列文章將介紹多種基於不同R包的作圖方法,希望能夠幫助到各位讀者。
1. 什麼是蜜蜂圖不知道蜜蜂圖的名字從何而來,我猜測可能是因為畫這個圖的包叫做beeswarm?我們先來看看蜜蜂圖長什麼樣。
Beeswarm看上去和我們之前的點圖很像,我們可以直觀來比較一下beeswarm和ggplot中使用jitter及point(默認參數)繪製同一組關於乳腺癌數據的圖:
從中可以發現,beeswarm很好的體現了數據的分布,更加清楚、直觀。而後兩者,難以快速獲取信息,point圖中點過於密集,jitter中分布過於散亂。這也是很多科學論文選擇beeswarm圖的原因。
在小樣本下,也許jitter或者point方法也能夠傳達我們想要傳遞的信息,但是在樣本量較大的時候,這兩個繪圖方法就不太適合了。
而beeswarm圖在大樣本的情況下也能使用。不僅可以體現每一個樣本具體情況,而且能夠查看整體的情況。
2. 怎麼繪製蜜蜂圖本次作圖使用兩個不同的包,之所以如此,是因為比較常見的製作蜜蜂圖的包就叫做"beeswarm",但是它和ggplot的作圖習慣略有差別。
鑑於之前都是利用ggplot作圖,所以也講解另一個基於ggplot的名叫ggbeeswarm的包。
Note:沒有安裝相關R包的,先安裝R包
2.1 需要什麼格式的數據本次使用的是beeswarm包中的breast數據。
install.packages("beeswarm")
library(beeswarm)
data(breast)
breast數據共有286個樣本,具體所表示的信息如下:
ER:Estrogen receptor status (factor with levels neg, pos).
ESR1 # Expression of the ESR1 gene (numeric).
ERBB2 # Expression of the ERBB2 gene (numeric).
time_survival # Time in months (numeric).
event_survival # Coded event: 0 = censored, 1 = metastasis (numeric).
2.2 使用beeswarm包繪圖beeswarm(time_survival ~ ER, data = breast,
pch = 16, pwcol = 1 + as.numeric(event_survival),
xlab = "", ylab = "Follow-up time (months)",
labels = c("ER neg", "ER pos"))
legend("topright", legend = c("Yes", "No"),
title = "Censored", pch = 16, col = 1:2)可以看到不像ggplot給具體的x=,y=,該包使用公式:舉例:p~ grp,那麼就相當於x為grp,y為p。另外,其修改圖諸多細節的方式也不一致。
pch是選擇點的樣式,不同的數字代表實心圓、空心圓、三角形、倒三角形等等。
pwcol是用來設置顏色,可以看到這裡+1原因是event_survival中含有0值,如果不加1,則顯示為無色,即查看不到這些樣本。
labels用來修改x軸標籤,然後使用legend功能添加圖例。
2.3 ggbeeswarm包繪圖install.packages("ggbeeswarm")
library(ggplot2)
library(ggbeeswarm)
ggplot(breast,aes(x=ER,y=time_survival)) +
geom_beeswarm(aes(color=factor(event_survival)),cex=1.5)+#cex用於設置點的密集程度
theme_bw() +
theme(legend.position = c("top"),
panel.grid = element_blank()) +
scale_color_manual(values=c("Black","Red"),name="Censored",labels=c("Yes","No"))+
scale_x_discrete(labels=c("ER neg","ER pos")) +
xlab("")+
ylab("Follow-up time (months)")本文作者蔣劉一琦,轉載自優雅R。