R語言ggboxplot-一文掌握箱線圖繪制所有細節

作者:白介素2
相關閱讀:
R語言ggplot2繪制箱線圖R語言生存分析04-Cox比例風險模型診斷
R語言生存分析03-Cox比例風險模型
R語言生存分析-02-ggforest
R語言生存分析-01
ggpubr-專為學術繪圖而生(二)
ggstatsplot-專為學術繪圖而生(一)
生存曲線
R語言GEO數據挖掘01-數據下載及提取表達矩陣
R語言GEO數據挖掘02-解決GEO數據中的多個探針對應一個基因
R語言GEO數據挖掘03-limma分析差異基因
R語言GEO數據挖掘04-功能富集分析

如果沒有時間精力學習代碼,推薦了解:零代碼數據挖掘課程

廣而告之

說一個事,鑒于簡書平臺在信息傳播方面有不足之處,應粉絲要求,白介素2的個人微信平臺已經開啟,繼續聊臨床與科研的故事,R語言,數據挖掘,文獻閱讀等內容。當然也不要期望過高,微信平臺目前的定位是作為自己的讀書筆記,如果對大家有幫助最好。如果感興趣, 可以掃碼關注下。

image

載入數據

Sys.setlocale('LC_ALL','C')
load(file = "F:/Bioinfor_project/Breast/AS_research/AS/result/hubgene.Rdata")
head(data)
require(cowplot)
require(tidyverse)
require(ggplot2)
require(ggsci)
require(ggpubr)
mydata<-data %>% 
  ## 基因表達數據gather,gather的范圍應調整
  gather(key="gene",value="Expression",CCL14:TUBB3) %>% 
  ##
  dplyr::select(ID,gene,Expression,everything()) 
head(mydata)  ## 每個基因作為一個變量的寬數據

創建帶有pvalue的箱線圖

p <- ggboxplot(mydata, x = "group", y = "Expression",
          color = "group", palette = "jama",
          add = "jitter")
#  Add p-value
p + stat_compare_means()
image.png

改變統計方法

# Change method
p + stat_compare_means(method = "t.test")

image.png

統計學意義標注

  • label="p.signif"
  • p.format等
  • label.x標注位置
p + stat_compare_means( label = "p.signif")
image.png

多組比較

  • 給出global pvalue
# Default method = "kruskal.test" for multiple groups
ggboxplot(mydata, x = "gene", y = "Expression",
          color = "gene",add="jitter", palette = "jama")+
  stat_compare_means()

# Change method to anova
ggboxplot(mydata, x = "gene", y = "Expression",
          color = "gene", add="jitter", palette = "jama")+
  stat_compare_means(method = "anova")
image.png

image.png

指定比較

  • 配對比較:會完成各個變量的比較,默認wilcox.test法,可修改
  • my_comparisions:可以指定自己想要進行的比較
  • 指定參考組,進行比較
require(ggpubr)
compare_means(Expression ~ gene,  data = mydata)

## 指定自己想要的比較
# Visualize: Specify the comparisons you want
my_comparisons <- list( c("CCL14", "HBA1"), c("HBA1", "CCL16"), c("CCL16", "TUBB3") )
ggboxplot(mydata, x = "gene", y = "Expression",
          color = "group",add = "jitter", palette = "jama")+ 
  stat_compare_means(comparisons = my_comparisons)#+ # Add pairwise comparisons p-value
  #stat_compare_means()     # Add global p-value
image.png

指定參考組

指定CCL14作為參考組與其它各組比較
ref.group

compare_means(Expression ~ gene,  data = mydata, ref.group = "CCL14",
              method = "t.test")
# Visualize
mydata %>% 
  filter(group=="TNBC") %>% # 篩選TNBC數據
ggboxplot( x = "gene", y = "Expression",
          color = "gene",add = "jitter", palette = "nejm")+
  stat_compare_means(method = "anova")+      # Add global p-value
  stat_compare_means(label = "p.signif", method = "t.test",
                     ref.group = "CCL14")      
image.png

多基因分面

按另外一個變量分組比較

## 比較各個基因在TNBC與Normal表達
compare_means( Expression ~ group, data = mydata, 
              group.by = "gene")
# Box plot facetted by "gene"
p <- ggboxplot(mydata, x = "group", y = "Expression",
          color = "group", palette = "jco",
          add = "jitter",
          facet.by = "gene", short.panel.labs = FALSE)
# Use only p.format as label. Remove method name.
p + stat_compare_means(label = "p.format")
image.png

將pvalue換成星號

  • hide.ns = TRUE.參數可隱藏ns
p + stat_compare_means(label =  "p.signif", label.x = 1.5)
image.png

將各個圖繪制在一張圖中

p <- ggboxplot(mydata, x = "gene", y = "Expression",
          color = "group", palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
image.png

修改下pvalue展示的方式

# Show only p-value
p + stat_compare_means(aes(group = group), label = "p.format")
image.png

用星號表示pvalue

# Use significance symbol as label
p + stat_compare_means(aes(group = group), label = "p.signif")
image.png

配對樣本比較

要求x,y具有相同的樣本數,進行一一配對比較

head(ToothGrowth)
compare_means(len ~ supp, data = ToothGrowth, 
              group.by = "dose", paired = TRUE)
# Box plot facetted by "dose"
p <- ggpaired(ToothGrowth, x = "supp", y = "len",
          color = "supp", palette = "jama", 
          line.color = "gray", line.size = 0.4,
          facet.by = "dose", short.panel.labs = FALSE)
# Use only p.format as label. Remove method name.
p + stat_compare_means(label = "p.format", paired = TRUE)
image.png

封裝為函數命名為group_box

  • 功能:已經選定的基因繪制箱線圖
    • 參數1:group分組變量,可以是自己所有感興趣的變量
  • 參數2:mydata為整理好的清潔數據,gene為長數據(gather版本)
head(mydata)
group_box<-function(group=group,data=mydata){
        p <- ggboxplot(mydata, x = "gene", y = "Expression",
          color = group, 
          palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
}

## 
group_box(group="PAM50",data = mydata)

封裝為函數命名為group_box

  • 功能:已經選定的基因繪制箱線圖
    • 參數1:group分組變量,可以是自己所有感興趣的變量
  • 參數2:mydata為整理好的清潔數據,gene為長數據(gather版本)
head(mydata)
group_box<-function(group=group,data=mydata){
        p <- ggboxplot(mydata, x = "gene", y = "Expression",
          color = group, 
          palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
}

## 
group_box(group="PAM50",data = mydata)
image.png

封裝函數gene_box

  • 目的功能:對感興趣的基因繪制和分組繪制boxplot
  • 注意這時使用的應該是基因的寬數據,因為涉及到單個基因作為變量
head(data)
usedata<-data
## 封裝函數
gene_box<-function(gene="CCL14",group="group",data=usedata){
p <- ggboxplot(data, x = group, y = gene,
          ylab = sprintf("Expression of %s",gene),
          xlab = group,
          color = group, 
          palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
}
gene_box(gene="CCL14")
image.png

牛刀小試

gene_box(gene="CCL16",group="PAM50")

image.png

批量繪制

  • 目的功能:繪制任意基因,任意分組,批量繪制一氣呵成了
  • 封裝函數+lapply批量繪制無敵
  • 在lapply中的函數參數設置,不在原函數中,而是直接放置在lapply中
  • do.call中參數1為函數,+c()包含原函數的參數設置,同樣參數設置不在原函數中
require(gridExtra)
head(data)

## 需要批量繪制的基因名
name<-colnames(data)[3:6]
## 批量繪圖
p<-lapply(name,gene_box,group = "T_stage")
## 組圖
do.call(grid.arrange,c(p,ncol=2))
image.png

本期的內容就到這里,我是老朋友白介素2,下期再見。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容