R語(yǔ)言繪制帶ErrorBar的分組條形圖代碼的分享
筆者近期畫(huà)了一張帶error bar的分組條形圖,將相關(guān)的代碼分享一下。
感謝網(wǎng)友青山屋主的建議,提示筆者要嚴(yán)謹(jǐn)區(qū)分技術(shù)重復(fù)和生物學(xué)重復(fù),所以筆者對(duì)文章做修改后重發(fā)。如果各位有任何建議,歡迎指正。
本文旨在給出一種利用R對(duì)生物學(xué)重復(fù)數(shù)據(jù)畫(huà)帶error bar的分組條形圖的方法。
所用數(shù)據(jù)是模擬生成的:分成三個(gè)組,每個(gè)組進(jìn)行了若干次生物學(xué)重復(fù);測(cè)量的是3種基因的表達(dá)量。數(shù)據(jù)的部分內(nèi)容如下:
## gene1 gene2 gene3 Group ## 1 49.72475 267.0007 126.2007 Group1 ## 2 114.62184 173.8780 150.2641 Group2 ## 3 128.03351 227.9456 152.6378 Group3 ## 4 134.90841 385.1979 148.2739 Group1 ## 5 136.56659 190.0663 122.6201 Group2 ## 6 143.88241 329.0516 236.9131 Group3
兩種方法的完整代碼放在了文末。如有問(wèn)題,歡迎指正!
第一種實(shí)現(xiàn)方法:用aggregate計(jì)算數(shù)據(jù)
# 導(dǎo)入數(shù)據(jù) setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這里改列名,這些列名就是最終圖上X軸的標(biāo)簽名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示數(shù)據(jù)集內(nèi)容
## 'data.frame': 3000 obs. of 4 variables: ## $ gene-1: num 49.7 114.6 128 134.9 136.6 ... ## $ gene-2: num 267 174 228 385 190 ... ## $ gene-3: num 126 150 153 148 123 ... ## $ Group : Factor w/ 3 levels "Group1","Group2",..: 1 2 3 1 2 3 1 2 3 1 ...
# 將上述"寬數(shù)據(jù)"轉(zhuǎn)化為"長(zhǎng)數(shù)據(jù)" library(reshape2) df_reshape <- melt(df, id.vars=c("Group")) str(df_reshape)
## 'data.frame': 9000 obs. of 3 variables: ## $ Group : Factor w/ 3 levels "Group1","Group2",..: 1 2 3 1 2 3 1 2 3 1 ... ## $ variable: Factor w/ 3 levels "gene-1","gene-2",..: 1 1 1 1 1 1 1 1 1 1 ... ## $ value : num 49.7 114.6 128 134.9 136.6 ...
# 獲取三個(gè)組各個(gè)基因表達(dá)量的平均值 df_mean <- aggregate(df_reshape$value, list(Group=df_reshape$Group, gene=df_reshape$variable), mean, na.rm=T) # 獲取三個(gè)組各個(gè)基因表達(dá)量的標(biāo)準(zhǔn)差 df_sd <- aggregate(df_reshape$value, list(Group=df_reshape$Group, gene=df_reshape$variable), sd, na.rm=T) # 合并mean和sd colnames(df_mean)[3] <- "mean" colnames(df_sd)[3] <- "sd" df_stat <- merge(df_mean, df_sd, by=c("Group", "gene")) str(df_stat)
## 'data.frame': 9 obs. of 4 variables: ## $ Group: Factor w/ 3 levels "Group1","Group2",..: 1 1 1 2 2 2 3 3 3 ## $ gene : Factor w/ 3 levels "gene-1","gene-2",..: 1 2 3 1 2 3 1 2 3 ## $ mean : num 120 249 149 119 250 ... ## $ sd : num 19.4 51.4 30.2 21.2 52.3 ...
# 畫(huà)圖 #直接在畫(huà)圖的語(yǔ)句中計(jì)算出error_bar所需的數(shù)據(jù): #(即下面的ymin=mean-sd和ymax=mean+sd語(yǔ)句)。 library(ggplot2) dodge <- position_dodge(width=.9) ggplot(data=df_stat) + geom_bar(aes(x=gene, y=mean, fill=Group), stat="identity", position=dodge) + geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), stat="identity", position=dodge, width=.3)
第二種實(shí)現(xiàn)方法:用dplyr包計(jì)算數(shù)據(jù)
# 導(dǎo)入數(shù)據(jù) setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這里改列名,這些列名就是最終圖上X軸的標(biāo)簽名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示數(shù)據(jù)集內(nèi)容
## 'data.frame': 3000 obs. of 4 variables: ## $ gene-1: num 49.7 114.6 128 134.9 136.6 ... ## $ gene-2: num 267 174 228 385 190 ... ## $ gene-3: num 126 150 153 148 123 ... ## $ Group : Factor w/ 3 levels "Group1","Group2",..: 1 2 3 1 2 3 1 2 3 1 ...
# 獲取三個(gè)組各個(gè)基因表達(dá)量的平均值和標(biāo)準(zhǔn)差 library(tidyr) library(dplyr) df_stat <- tbl_df(df) %>% gather(gene, value, -Group) %>% # 將"寬數(shù)據(jù)"轉(zhuǎn)化為"長(zhǎng)數(shù)據(jù)" group_by(Group, gene) %>% # 將數(shù)據(jù)分組 summarise(mean=mean(value, na.rm=T), sd=sd(value, na.rm=T)) %>% # 計(jì)算每組數(shù)據(jù)的mean和sd ungroup() str(df_stat)
## Classes 'tbl_df', 'tbl' and 'data.frame': 9 obs. of 4 variables: ## $ Group: Factor w/ 3 levels "Group1","Group2",..: 1 1 1 2 2 2 3 3 3 ## $ gene : chr "gene-1" "gene-2" "gene-3" "gene-1" ... ## $ mean : num 120 249 149 119 250 ... ## $ sd : num 19.4 51.4 30.2 21.2 52.3 ...
# 畫(huà)圖 #直接在畫(huà)圖的語(yǔ)句中計(jì)算出error_bar所需的數(shù)據(jù): #(即下面的ymin=mean-sd和ymax=mean+sd語(yǔ)句)。 library(ggplot2) dodge <- position_dodge(width=.9) df_stat %>% ggplot() + geom_bar(aes(x=gene, y=mean, fill=Group), stat="identity", position=dodge) + geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), stat="identity", position=dodge, width=.3)
兩種方法的結(jié)果是一樣的,相對(duì)而言,dplyr的實(shí)現(xiàn)方法更簡(jiǎn)單快捷。
最后,兩種方法的完整代碼如下:
#################第一種實(shí)現(xiàn)方法:用aggregate計(jì)算數(shù)據(jù)###################### # 導(dǎo)入數(shù)據(jù) setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這里改列名,這些列名就是最終圖上X軸的標(biāo)簽名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示數(shù)據(jù)集內(nèi)容 # 將上述"寬數(shù)據(jù)"轉(zhuǎn)化為"長(zhǎng)數(shù)據(jù)" library(reshape2) df_reshape <- melt(df, id.vars=c("Group")) str(df_reshape) # 獲取三個(gè)組各個(gè)基因表達(dá)量的平均值 df_mean <- aggregate(df_reshape$value, list(Group=df_reshape$Group, gene=df_reshape$variable), mean, na.rm=T) # 獲取三個(gè)組各個(gè)基因表達(dá)量的標(biāo)準(zhǔn)差 df_sd <- aggregate(df_reshape$value, list(Group=df_reshape$Group, gene=df_reshape$variable), sd, na.rm=T) # 合并mean和sd colnames(df_mean)[3] <- "mean" colnames(df_sd)[3] <- "sd" df_stat <- merge(df_mean, df_sd, by=c("Group", "gene")) str(df_stat) # 畫(huà)圖 #直接在畫(huà)圖的語(yǔ)句中計(jì)算出error_bar所需的數(shù)據(jù): #(即下面的ymin=mean-sd和ymax=mean+sd語(yǔ)句)。 library(ggplot2) dodge <- position_dodge(width=.9) ggplot(data=df_stat) + geom_bar(aes(x=gene, y=mean, fill=Group), stat="identity", position=dodge) + geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), stat="identity", position=dodge, width=.3) ####################第二種實(shí)現(xiàn)方法:用dplyr包計(jì)算數(shù)據(jù)###################### # 導(dǎo)入數(shù)據(jù) setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這里改列名,這些列名就是最終圖上X軸的標(biāo)簽名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示數(shù)據(jù)集內(nèi)容 # 獲取三個(gè)組各個(gè)基因表達(dá)量的平均值和標(biāo)準(zhǔn)差 library(tidyr) library(dplyr) df_stat <- tbl_df(df) %>% gather(gene, value, -Group) %>% # 將"寬數(shù)據(jù)"轉(zhuǎn)化為"長(zhǎng)數(shù)據(jù)" group_by(Group, gene) %>% # 將數(shù)據(jù)分組 summarise(mean=mean(value, na.rm=T), sd=sd(value, na.rm=T)) %>% # 計(jì)算每組數(shù)據(jù)的mean和sd ungroup() str(df_stat) # 畫(huà)圖 #直接在畫(huà)圖的語(yǔ)句中計(jì)算出error_bar所需的數(shù)據(jù): #(即下面的ymin=mean-sd和ymax=mean+sd語(yǔ)句)。 library(ggplot2) dodge <- position_dodge(width=.9) df_stat %>% ggplot() + geom_bar(aes(x=gene, y=mean, fill=Group), stat="identity", position=dodge) + geom_errorbar(aes(x=gene, ymin=mean-sd, ymax=mean+sd, color=Group), stat="identity", position=dodge, width=.3)
以上就是 R語(yǔ)言繪制帶ErrorBar的分組條形圖代碼的分享的詳細(xì)內(nèi)容,更多關(guān)于 R語(yǔ)言繪制帶ErrorBar的分組條形圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
R語(yǔ)言利用barplot()制作條形圖的各種實(shí)例
這篇文章主要給大家介紹了關(guān)于R語(yǔ)言利用barplot()制作條形圖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言 data.frame()命令的使用說(shuō)明
這篇文章主要介紹了R語(yǔ)言 data.frame()命令的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04R語(yǔ)言 install.packages 無(wú)法讀取索引的解決方案
這篇文章主要介紹了R語(yǔ)言 install.packages 無(wú)法讀取索引的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04R語(yǔ)言函數(shù)基礎(chǔ)知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于R語(yǔ)言函數(shù)基礎(chǔ)知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-04-04R語(yǔ)言關(guān)于泊松回歸知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是一篇關(guān)于R語(yǔ)言關(guān)于泊松回歸知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05使用ggsignif優(yōu)雅添加顯著性標(biāo)記詳解
這篇文章主要為大家介紹了使用ggsignif優(yōu)雅添加顯著性標(biāo)記詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09R語(yǔ)言中set.seed()函數(shù)的作用詳解
set.seed()括號(hào)里面的參數(shù)可以是任意數(shù)字,是代表你設(shè)置的第幾號(hào)種子而已,不會(huì)參與運(yùn)算,是個(gè)標(biāo)記而已。,這篇文章主要介紹了R語(yǔ)言中set.seed()函數(shù)的作用,需要的朋友可以參考下2022-09-09