R語言-使用ggplot2繪制物種豐度堆疊柱狀圖

本文使用某宏基因組測序數(shù)據(jù)中的種水平類群豐度表,并直接根據(jù)所有種相對豐度總和叛拷,提取出top10豐度的種類群,作圖展示這些種的豐度組成猜憎,top10外的類群合并為“Others”搁料。

  • 作圖數(shù)據(jù)說明

  • 文件“species_RPM_table-NC.txt”為某宏基因組測序所得的種水平類群豐度(RPM)表格(即界門綱目科屬種的“門”這一水平)奈嘿,第一列(Taxonomy)為每類物種的名稱量承,第一行為樣本ID(名稱及順序要與以下兩個文件一致)好唯;每一行為一類種馍资,交叉區(qū)域為每類種在各樣本中的豐度(RPM)筒主,內(nèi)容如下:


    species_RPM_table-NC.txt
  • 文件“sample_frequency.txt”為各樣本的總序列數(shù)(total mapped reads),第1列為樣本ID,第2列為物種數(shù)量乌妙,第3列為總序列數(shù)使兔,內(nèi)容如下:
    sample_frequency.txt
  • 文件“sample_group.txt”為各樣本的分組信息,第一列為各樣本名稱冠胯;第二列(group)為各樣本的分組信息火诸,其內(nèi)容如下:
    sample_group.txt
  • 繪圖腳本說明

操作環(huán)境: Rstudio
腳本保存位置:D:\ ...\new_database\S_table\RPM\cutoff-0.5\draw_taxa_barplot.r

####讀取并挑選 top10 豐度種(RPM),并繪制物種豐度堆疊柱狀圖

#讀取數(shù)據(jù):特征表
species <- read.delim('species_RPM_table-NC.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)

#求各類群的豐度總和荠察,并排序
species$sum <- rowSums(species)
species <- species[order(species$sum, decreasing = TRUE), ]

#挑選 top10 種類群置蜀,并將 top10 外的類群合并為“Others”
species_top10 <- species[1:10, -ncol(species)]

## 讀取數(shù)據(jù):樣本的總特征序列數(shù)
sample_frequency <- read.delim('sample_frequency.txt', row.names = 1, sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)

## others:用每個樣本對應(yīng)的總特征序列數(shù)減去top10
species_top10['Others', ] <- sample_frequency$feature_count - colSums(species_top10)  

## others:當使用相對豐度表時,用1減去top10物種的相對豐度
# species_top10['Others', ] <- 1 - colSums(species_top10)

#可選輸出(如 csv 格式)
write.csv(species_top10, 'species_top10.csv', quote = FALSE)

####ggplot2 作圖
library(reshape2)   #用于排列數(shù)據(jù)
library(ggplot2)    #ggplot2 作圖

#調(diào)整數(shù)據(jù)布局
species_top10$Taxonomy <- factor(rownames(species_top10), levels = rev(rownames(species_top10)))
species_top10 <- melt(species_top10, id = 'Taxonomy')

#添加分組:variable列為各樣本名稱悉盆,Taxonomy列為各類群名稱盯荤,value列為各樣本中各類群的相對豐度,group列為各樣本的分組信息
group <- read.delim('sample_group.txt', sep = '\t', stringsAsFactors = FALSE)
names(group)[1] <- 'variable'
species_top10 <- merge(species_top10, group, by = 'variable')

## 指定橫坐標(樣本ID)順序
species_top10$variable=factor(species_top10$variable,levels = c("A0065","A4313","C0065","C4313","C4445","V0065","V4313","V4445"))

#繪制帶分面的柱狀圖
# p <- ggplot(species_top10, aes(variable, 100 * value, fill = Taxonomy)) +    ##相對豐度乘以100焕盟,求百分比
p <- ggplot(species_top10, aes(variable, value, fill = Taxonomy)) +
     geom_col(position = 'stack', width = 0.6) +
     facet_wrap(~group, scales = 'free_x', ncol = 3) +   ### ncol 分組數(shù)量
     scale_fill_manual(values =  rev(c('blue', 'orange', 'green', 'yellow', 'red', 'hotpink', 'cyan','purple', 'burlywood1', 'skyblue', 'gray'))) +
    # labs(x = '', y = 'Relative Abundance(%)') +
     labs(x = '', y = 'RPM') +
     theme(panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'), strip.text = element_text(size = 12)) +    ##設(shè)定分面標題字體大小
     theme(axis.text = element_text(size = 10), axis.title = element_text(size = 13), legend.title = element_blank(), legend.text = element_text(size = 11))

## 使用geom_col()繪制柱狀圖秋秤,position = 'stack',堆疊柱狀圖脚翘,width = 0.6灼卢,柱子寬度;labs()設(shè)置坐標軸標簽来农;theme()中鞋真,axis.text和axis.title分別指定坐標軸刻度字體大小及標簽字體大小,legend.text指定圖例字體大小沃于。

## 保存圖片:結(jié)果如下圖
ggsave('species_taxa_barplot.png', p, width = 8, height = 6)


#### 其他方法:barplot 作圖(一個簡單示例)
#定義作圖整體分布
png('barplot_plot.png', width = 1000, height = 700)
par(xpd = TRUE, mar = par()$mar + c(1, 3, 1, 16))

#barplot作圖涩咖,包含了顏色、字體大小繁莹、圖例位置等信息
barplot(as.matrix(100 * phylum_top10), col = c('blue', 'orange', 'green', 'yellow', 'red', 'hotpink', 'cyan','purple', 'burlywood1', 'skyblue', 'gray'),
        legend = rownames(species_top10), 
        cex.axis = 2, cex.names = 2, ylim = c(0, 100), las = 1, width = 0.5, space = 0.5, beside = FALSE,
        args.legend = list(x = 'right', bty = 'n', inset = -0.18, cex = 2, y.intersp = 1.2, x.intersp = 0.7, text.width = 1))
mtext('Relative Abundance(%)', cex = 2, side = 2, line = 4)
dev.off()

species_taxa_barplot.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末檩互,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咨演,更是在濱河造成了極大的恐慌闸昨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪标,死亡現(xiàn)場離奇詭異零院,居然都是意外死亡,警方通過查閱死者的電腦和手機村刨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撰茎,“玉大人嵌牺,你說我怎么就攤上這事。” “怎么了逆粹?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵募疮,是天一觀的道長。 經(jīng)常有香客問我僻弹,道長阿浓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任蹋绽,我火速辦了婚禮芭毙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卸耘。我一直安慰自己退敦,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布蚣抗。 她就那樣靜靜地躺著侈百,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翰铡。 梳的紋絲不亂的頭發(fā)上钝域,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音锭魔,去河邊找鬼例证。 笑死,一個胖子當著我的面吹牛赂毯,可吹牛的內(nèi)容都是我干的战虏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼党涕,長吁一口氣:“原來是場噩夢啊……” “哼烦感!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起膛堤,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤手趣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肥荔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绿渣,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年燕耿,在試婚紗的時候發(fā)現(xiàn)自己被綠了中符。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡誉帅,死狀恐怖淀散,靈堂內(nèi)的尸體忽然破棺而出右莱,到底是詐尸還是另有隱情,我是刑警寧澤档插,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布慢蜓,位于F島的核電站,受9級特大地震影響郭膛,放射性物質(zhì)發(fā)生泄漏晨抡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一则剃、第九天 我趴在偏房一處隱蔽的房頂上張望耘柱。 院中可真熱鬧,春花似錦忍级、人聲如沸帆谍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汛蝙。三九已至,卻和暖如春朴肺,著一層夾襖步出監(jiān)牢的瞬間窖剑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工戈稿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留西土,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓鞍盗,卻偏偏與公主長得像需了,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子般甲,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容