群落微生物物種豐度表-繪制堆疊柱形圖(ggplot 2)
今天我們先來講一下如何利用細菌群落的高通量測序數據來繪制堆疊柱形圖來展示不同樣品中優勢菌的相對多度。
話不多說,直接上數據。
1 加載數據及預處理
1.1查看數據
現在先解釋一下,這組數據一個6個樣本(sample_1 到sample_6),每個樣本有3個重復,一共有18個樣本進行高通量測序,高通量測序樣本名稱為(A1-A18)。主要有兩個表,一個名稱為genus的屬水平的豐度表;一個名稱為group的樣本分組信息表。
作為例子數據是屬水平的物種豐度表,如圖1-1所示:
圖1.1-1 屬水平的物種豐度表
group的樣本分組信息表,如圖·1-2所示:
這里注意一下,由于前期準備原因把樣本名稱輸成了sample-1,導致后面計算出錯,所以這里修改樣本名稱為(sample_1到sample_6),特此糾正。
圖1.1-2 group分組信息表
圖1.1-3 測序樣本名與樣本名稱的對應關系
1.2加載數據及數據預處理
#設置工作路徑
setwd("C:/Users/shanpengloveforever/Desktop/圖/微信")
#加載genus 物種豐度表
data<-read.table("genus.txt",header=T,sep="\t",row.names=1)
data$sum <- rowSums(data) #求每一行的和
# 按每行的和降序排列
data1 <- data[order(data$sum, decreasing=TRUE), ]
#data2 <- data1[order(data1$sum, decreasing=FALSE), ] 按每行的和升序排列
data1 <- data1[,-19] #刪除sum列,為了計算后面分組的平均值
圖1.2-1
圖1.2-2
#按行求指定列平均值,并且把算好的平均值添加data1數據框
data1$sample_1 <- apply(data1[,1:3], 1, mean)
data1$sample_2 <- apply(data1[,4:6], 1, mean)
data1$sample_3 <- apply(data1[,7:9], 1, mean)
data1$sample_4 <- apply(data1[,10:12], 1, mean)
data1$sample_5<- apply(data1[,13:15], 1, mean)
data1$sample_6 <- apply(data1[,16:18], 1, mean)
#提取出已經算好的平均值到data2數據集
data2 <- data1[,19:24]
#取出豐富度排名前10的物種,并且計算相對豐度
#由于之間已經按照每行的和進行過升序排列,所以可以直接去前10行
data3<- data2[1:10,]/apply(data2,2,sum)
data4 <- 1-apply(data3, 2, sum) #計算剩下物種的總豐度
#合并數據
data3 <- rbind(data3,data4)
圖1.2-3
圖1.2-4
圖1.2-5
圖1.2-6
圖1.2-7
使用R語言將data3 數據集導出
write.table (data3, file ="data3.csv",sep =",", quote =FALSE) #將數據導出
圖1.2-8
在Excel中修改data3 數據集,并且另存為genus1文本文件
圖1.2-9
加載新數據集genus1
#導入修改好的數據
data3 <- read.table("genus1.txt",header=T,sep="\t",row.names=1)
#查看數據
row.names(data3)
colnames(data3)
apply(data3, 2, sum)
圖1.2-10
2. 使用ggplot2 進行繪制堆疊柱形圖
2.1 加載group分組信息及數據集的組合
#加載包
library(reshape2)
library(ggplot2)
#把data3 數據整理成 ggplot2 作圖格式
#將菌名添加到data3里面,為了后面的數據轉化
data3$Taxonomy <- factor(rownames(data3), levels = rev(rownames(data3)))
#寬數據轉化為長數據
data4 <- melt(data3, id = 'Taxonomy')
圖2.1-1
圖2.1-2
#加載group分組信息表
group <- read.delim('group.txt', sep = '\t', stringsAsFactors = FALSE)
names(data4)[2] <- 'sample' #修改列名
data5 <- merge(data4, group, by = 'sample')
圖2.1-3
圖2.1-4
2.2 使用ggplot2繪圖
p<- ggplot(data5, aes(x=sample, y=100 * value, fill = Taxonomy)) +
#數據輸入:樣本、物種、豐度
geom_col(position = 'stack', width = 0.6) + # stack:堆疊圖
scale_y_continuous(expand=c(0, 0))+# 調整y軸屬性,使柱子與X軸坐標接觸
scale_fill_manual(values = rev(c('#FF0000',
'#FF88C2', '#FF00FF', '#9999FF', '#33FFFF',
'#33FF33', '#D1BBFF', '#770077', '#EE7700',
'#CCEEFF', '#0000AA'))) + #手動修改顏色
labs(x = 'Samples', y = '相對分度\n Relative Abundance(%)') + #設置X軸和Y軸的信息
theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'), strip.text = element_text(size = 12)) + #設置主題背景,根據自己的需求定制
theme(axis.text = element_text(size = 12), axis.title = element_text(size = 13), legend.title = element_blank(), legend.text = element_text(size = 11))
p
圖2.2-1
將繪制好的堆疊柱狀圖,保存為pdf和png格式
ggsave(filename = "genus.pdf",
p,
width=10,
heigh=8)
ggsave('genus.png', p, width = 10, height = 8)
#補充
theme(axis.text.x=element_text(angle=45, hjust=1))
# angle:調整橫軸標簽傾斜角度
# hjust:上下移動橫軸標簽
今天的內容就是這些,主要是數據處理和ggplot2 繪制堆疊柱狀圖,有什么不懂的可以私聊我。
今天的的數據和源代碼我已經上傳到我的gitee倉庫,可以在微信公眾號后臺回復“數據”獲取倉庫鏈接
如有不足或錯誤之處,請批評指正。
有什么不明白的也歡迎留言討論。
歡迎關注同名wxgzh
往期內容:
《數量生態學:R語言的應用》第二版第三章-關聯測度與矩陣------Q模式
《數量生態學——R語言的應用》第二版閱讀筆記--緒論和第二章(一部分)
感謝你的閱讀!!!你的點贊關注轉發是對我最大的鼓勵。