R語言繪製堆疊柱形圖示例

2021-02-20 小白魚的生統筆記

    barplot()為R中繪製柱形圖的常用命令之一,R啟動時默認加載。以下是使用barplot()繪製物種堆疊柱形圖的一個簡單示例,用於展示細菌類群組成豐度。

#讀取數據
phylum_top10 <- read.csv('phylum_top10.csv', row.names = 1, stringsAsFactors = FALSE, check.names = FALSE)

#barplot() 作圖,可使用 ?barplot 查看該命令詳情
png('barplot_plot.png', width = 1000, height = 700)
par(xpd = TRUE, mar = par()$mar + c(1, 3, 1, 16))

barplot(as.matrix(100 * phylum_top10), col = c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5', 'gray'),
legend = rownames(phylum_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()

    對於我個人來講,大多數時候更喜歡使用ggplot2。與barplot()相比,ggplot2可調節性強,功能更為強大,且通用性強。以下簡單展示ggplot2繪製物種堆疊柱形圖的方法。

library(reshape2)
library(ggplot2)

#整理成 ggplot2 作圖格式
phylum_top10$Taxonomy <- factor(rownames(phylum_top10), levels = rev(rownames(phylum_top10)))
phylum_top10 <- melt(phylum_top10, id = 'Taxonomy')

#添加分組,這次我們根據樣本分組繪製分面
group <- read.delim('group.txt', sep = '\t', stringsAsFactors = FALSE)
names(group)[1] <- 'variable'
phylum_top10 <- merge(phylum_top10, group, by = 'variable')

#繪製帶分面的柱狀圖
p <- ggplot(phylum_top10, aes(variable, 100 * value, fill = Taxonomy)) +
geom_col(position = 'stack', width = 0.6) +
facet_wrap(~group, scales = 'free_x', ncol = 2) +
scale_fill_manual(values = rev(c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5', 'gray'))) +
labs(x = '', y = 'Relative Abundance(%)') +
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))

#ggsave('ggplot2_plot.pdf', p, width = 8, height = 6)
ggsave('ggplot2_plot.png', p, width = 8, height = 6)

    補充內容,關於ggplot2的柱形圖參數,geom_col(position = 'stack')和geom_col(position = 'fill'),均可用於繪製堆疊柱形圖,但是這兩個參數的作圖結果是不一樣的。

#比方說我們剔除其中的「Others」,作為展示
phylum_top10_noothers <- subset(phylum_top10, Taxonomy != 'Others')

#參數 geom_col(position = 'stack')
ggplot(phylum_top10_noothers, aes(variable, value, fill = Taxonomy)) +
geom_col(position = 'stack', width = 0.6) +
labs(x = '', y = 'Relative Abundance')

#參數 geom_col(position = 'fill')
ggplot(phylum_top10_noothers, aes(variable, value, fill = Taxonomy)) +
geom_col(position = 'fill', width = 0.6) +
labs(x = '', y = 'Relative Abundance')

    下圖A為參數「geom_col(position = 'stack')」的作圖結果,y軸展示原始計數,即作圖數據中給定值為多少即展示多少,y軸取值最大值為作圖數據中各樣本中細菌類群豐度總和;B為「position = 'fill'」,首先再次將作圖數據中每個類群的豐度除以其在各樣本中的總豐度,即展示重新計算的比例,y軸值最大值默認為1。

    

    以上分別展示了barplot()以及ggplot2繪製物種堆疊柱形圖的2個簡單示例。本篇作為簡單介紹,更詳細更複雜的繪製方法還需大家在實踐中慢慢領悟了。



相關焦點

  • 教您用R語言畫直方圖!| 繽紛燦爛R語言 | 醫學方R語言高階課程
    :接受一個數值向量或者一個矩陣;當為一個向量時,則該向量用來繪製左半邊的條形圖或者直方圖;當為一個矩陣時,該矩陣的第一列數據用來繪製左半邊的圖,第二列用來繪製右半邊的圖,而其他列(假如存在其他列)則被自動忽略了。
  • 【R函數學習】R語言時間序列函數整理
    、偏自相關係數等例題2.1 d=scan("sha.csv")sha=ts(d,start=1964,freq=1)plot.ts(sha) #繪製時序圖acf(sha,22) #繪製自相關圖,滯後期數22pacf(sha,22) #繪製偏自相關圖,滯後期數22corr=acf(sha,22) #保存相關係數cov=acf
  • Excel電子書分享16:49個圖表示例,助你隨心所欲繪製Excel圖表
    毫不誇張地說,Excel圖表的繪製能力是Excel技術水平的綜合體現。除了圖表技術本身的操作技巧外,很多圖表至少使用了兩種以上的Excel技術,譬如公式與函數、名稱、數據有效性、VBA。本電子書《49個圖表示例,助你隨心所欲繪製Excel圖表》詳細講解了49個Excel圖表製作案例,其中包含著大量的Excel圖表繪製技巧,能夠快速提高你的Excel圖表技能,值得你花時間好好研究。
  • 雙Y軸圖形繪製系列之——Excel繪製(雙Y軸柱狀圖)
    雙Y軸圖形繪製系列之——Excel繪製(雙Y軸柱狀圖)當一個橫坐標參數對應兩類差異比較大的縱坐標參數
  • 我的R語言學習方法
    我為什麼要學習R語言?利用R語言做數據分析的工作;我怎麼學習R語言?在快速學習R語言基礎後,採用邊學邊做,不斷強化的策略學習和應用R語言;我學習R語言的什麼,我主要學習了R語言做數據整理,數據分析、數據建模和數據可視化這四方面的內容,並且對幫助我有效完成數據工作非常有幫助。第二點,我談一下自己在學習R語言的具體方法和做法。
  • R語言時間序列函數大全(收藏!)
    acf(sha,22) #繪製自相關圖,滯後期數22pacf(sha,22) #繪製偏自相關圖,滯後期數22corr=acf(sha,22) #保存相關係數cov=acf(sha,22,type = 「covariance」) #保存協方差2、同時繪製兩組數據的時序圖d=read.csv
  • 【C語言】什麼是 lvalue,什麼是 rvalue?
    一般出現在諸如各種、書籍中,更頻繁遇到的是在你的錯誤提示中:一般你會看到這個是因為你的代碼這麼寫:……        int i;        5 = i;……一些朋友想當然的就覺得 lvalue 指的就是賦值運算符左邊的那個值,而 rvalue 當然就是右邊那個值啦。
  • R語言給PCA加個小圈圈
    小夥伴們,在遇到組學實驗數據分析得時候,是少不了繪製PCA圖的,但是除了常規的PCA圖以外,往往也需要在我們的流程結果的PCA上展現組內樣品的分布範圍:像這樣的這樣的另外我們公司R語言培訓中也有專門的PCA的圖形繪製。其中也涉及了用ggplot2來繪製PCA加圈的圖。例如我們這篇文章的封面圖片就是用ggplot2畫的。但是ggplot功能強大,也就意味著參數多啊,所以還是我們的ggord簡單易上手,另外還可以加入變量的」小線條「。所以老師如果想自己動手,豐衣足食的話。別急,我們有簡化版的PCA繪製教程。
  • 【MATLAB圖像】— 繪製plot與其它二維圖形
    clearclcx=0:0.02*pi:5*pi;y1=sin(x);y2=cos(x);subplot(131);plot(x),title('x');subplot(132);plot(x,y1,'r*'),title('y1=sin(x)');subplot(133);plot(x,y2),title('y2=cos(x
  • 雙Y軸圖形繪製系列之——origin繪製(雙Y軸柱狀圖)
    雙Y軸圖形繪製系列之——origin繪製(雙Y軸柱狀圖)
  • R語言卡方檢驗|問卷的交叉分析
    棘狀圖可以由vcd包的spine()函數或者基礎自帶的spineplot()函數繪製。通過棘狀圖可以直觀的觀察到兩個變量間的差異。R語言中的卡方檢驗十分便利,只需要一個函數即可計算出卡方檢驗需要的參數值。
  • 如何入門R語言
    然而,不少朋友由於之前學的是偏向人文社科的專業,之前連Excel都玩不順手,更別提接觸過程式語言了。面對市面上一堆R語言的書籍,可能有些不知所措,一看一些專業性比較強的書,就直接懵逼了。因此,我以本文來記錄一下我將近1年半的R語言學習歷程,希望能對有相似背景的朋友提供一些幫助。個人背景本人是上海某大學的一年級統計學研究生。
  • 《R語言實戰》菜雞筆記(八):回歸
    Income + Frost, data=data_1)qqPlot(fit_4, labels=row.names(data_1), id.method="identify", simulate=TRUE, main="Q-Q Plot") data_1["Nevada",]fitted(fit_4)["Nevada" ] residuals(fit_4)["Nevada"] rstudent
  • 自然語言處理(NLP)入門指南
    v=nfoudtpBV68&list=PL6397E4B26D00A269•  斯坦福CS224d:自然語言處理的深度學習[更高級的機器學習算法、深度學習和NLP的神經網絡架構]http://cs224d.stanford.edu/syllabus.html•  Coursera:自然語言處理簡介[由密西根大學提供的NLP課程]https
  • 在EXCEL中繪製正態分布曲線
    接下來就來繪製這組數據的正態分布曲線第一步:計算數據的均值和標準偏差 在E1輸入公式 =ROUND(AVERAGE(B2:B31),2)第二步:計算曲線橫坐標上下限 我們通常關注μ±3σ內的分布區間,所以一般繪製μ±3σ內的曲線。分別計算出μ-3σ和μ+3σ備用
  • R語言讀取xlsx文件
    關於R語言讀取Excel文件,比較麻煩,我從來都反對直接讀取xlsx文件,因為爬蟲數據時,一般保存的格式都是csv文件,或者直接保存到資料庫裡面
  • C語言 | 求圓周長 面積 表面積 體積
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • C語言中的奇技淫巧
    前言學習C語言的過程中,總會遇到很多令人眼前一亮的代碼,尤其是你寫了幾十行的代碼,別人只用了簡單幾行的遞歸就實現的功能
  • 差異分析、顯著性標記及統計作圖的自動實現R代碼示例
    或者更換為非參數的方法,這裡展示一個針對於非參數檢驗的方法示例,先執行Kruskal-Wallis檢驗比較整體差異,再執行Behrens-Fisher的非參數多重比較查看兩兩差異。本人的很多經驗學自《R語言實戰 第二版》,它的154頁有這一段話。因此,對於非參數的檢驗方法,我也是一直在使用wilcoxon檢驗+p值校正的方法,代替多重比較。
  • R代碼|dplyr包的使用示例
    filter(between(Sepal.Width, 2, 2.5)) %>%  print(n = 3)iris_df %>%  filter(str_starts(Species, "v")) %>%  print(n = 3)iris_df %>%  filter(str_ends(Species, "r"