<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
筆者近期畫了一張帶error bar的分組條形圖,將相關的程式碼分享一下。
感謝網友青山屋主的建議,提示筆者要嚴謹區分技術重複和生物學重複,所以筆者對文章做修改後重發。如果各位有任何建議,歡迎指正。
本文旨在給出一種利用R對生物學重複資料畫帶error bar的分組條形圖的方法。
所用資料是模擬生成的:分成三個組,每個組進行了若干次生物學重複;測量的是3種基因的表達量。資料的部分內容如下:
## 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
兩種方法的完整程式碼放在了文末。如有問題,歡迎指正!
# 匯入資料 setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這裡改列名,這些列名就是最終圖上X軸的標籤名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示資料集內容
## '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 ...
# 將上述"寬資料"轉化為"長資料" 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 ...
# 獲取三個組各個基因表達量的平均值 df_mean <- aggregate(df_reshape$value, list(Group=df_reshape$Group, gene=df_reshape$variable), mean, na.rm=T) # 獲取三個組各個基因表達量的標準差 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 ...
# 畫圖 #直接在畫圖的語句中計算出error_bar所需的資料: #(即下面的ymin=mean-sd和ymax=mean+sd語句)。 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)
# 匯入資料 setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這裡改列名,這些列名就是最終圖上X軸的標籤名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示資料集內容
## '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 ...
# 獲取三個組各個基因表達量的平均值和標準差 library(tidyr) library(dplyr) df_stat <- tbl_df(df) %>% gather(gene, value, -Group) %>% # 將"寬資料"轉化為"長資料" group_by(Group, gene) %>% # 將資料分組 summarise(mean=mean(value, na.rm=T), sd=sd(value, na.rm=T)) %>% # 計算每組資料的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 ...
# 畫圖 #直接在畫圖的語句中計算出error_bar所需的資料: #(即下面的ymin=mean-sd和ymax=mean+sd語句)。 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)
兩種方法的結果是一樣的,相對而言,dplyr的實現方法更簡單快捷。
最後,兩種方法的完整程式碼如下:
#################第一種實現方法:用aggregate計算資料###################### # 匯入資料 setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這裡改列名,這些列名就是最終圖上X軸的標籤名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示資料集內容 # 將上述"寬資料"轉化為"長資料" library(reshape2) df_reshape <- melt(df, id.vars=c("Group")) str(df_reshape) # 獲取三個組各個基因表達量的平均值 df_mean <- aggregate(df_reshape$value, list(Group=df_reshape$Group, gene=df_reshape$variable), mean, na.rm=T) # 獲取三個組各個基因表達量的標準差 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) # 畫圖 #直接在畫圖的語句中計算出error_bar所需的資料: #(即下面的ymin=mean-sd和ymax=mean+sd語句)。 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) ####################第二種實現方法:用dplyr包計算資料###################### # 匯入資料 setwd("E:/") df <- read.csv("gene_exp.csv", header=T) # 可以在這裡改列名,這些列名就是最終圖上X軸的標籤名。 colnames(df)[1:3] <- c("gene-1", "gene-2", "gene-3") str(df) # 顯示資料集內容 # 獲取三個組各個基因表達量的平均值和標準差 library(tidyr) library(dplyr) df_stat <- tbl_df(df) %>% gather(gene, value, -Group) %>% # 將"寬資料"轉化為"長資料" group_by(Group, gene) %>% # 將資料分組 summarise(mean=mean(value, na.rm=T), sd=sd(value, na.rm=T)) %>% # 計算每組資料的mean和sd ungroup() str(df_stat) # 畫圖 #直接在畫圖的語句中計算出error_bar所需的資料: #(即下面的ymin=mean-sd和ymax=mean+sd語句)。 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語言繪製帶ErrorBar的分組條形圖程式碼的分享的詳細內容,更多關於 R語言繪製帶ErrorBar的分組條形圖的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45