今天我們要教給大家的是如何用barplot()做堆砌條形圖,首先通過下圖來了解下繪圖區(Plot region)和邊緣區(Margin),下圖中綠色虛線包圍的是(主要的)繪圖區,綠框之外就是邊緣空白區,這個margin區域的大小是由par函數中的mar參數控制,默認為par(mar=c(5,4,4,2)+0.1),也就是空白區的大小依照下左上右(順時針)的順序分別為5,4,4,2(我從來沒管過它的「單位」),可以通過修改該值來調節空白區大小,從而使圖形展示更美觀。
想了解barplot()函數的用法,1、可以在命令行輸入「?barplot「,點擊「Enter」鍵即可查看說明文檔。2、在命令行輸入「example(barplot)」,之後多次點擊「Enter」即可查看多個例圖及對應的腳本。
step 1 讀入並處理數據,該示例數據及完整腳本請至雲盤下載,連結: https://pan.baidu.com/s/1bpyZh19 密碼: 6vr3
data<-read.table("genus_abundance.txt",header=T,row.names=1,sep="\t")###read.table函數讀取genus_abundance.txt文件,並將第一行設置為行名(header=T),第一列設置為列名(row.names=1),告訴函數所讀取的文件是Tab分隔的文本文件(sep="\t")。想了解更多read.table中各個參數的含義,可以直接在命令行輸入「?read.table」點擊回車鍵就會彈出網頁文檔。
head(data) ###以下三條命令是我個人的習慣,可以查看data的一些特徵,其中head是查看文件前6行,dim是查看維度(適合二維以上的數據結構),class可以查看data的類型,在本例中,讀入的data是一個19行9列的數據框。
dim(data)
class(data)
下面我們用barplot()來做個柱狀圖
結果報錯了,根據錯誤提示我們知道,barplot只能接受「向量(vector)」或者「矩陣(matrix)」這兩種數據結構,而我們給它的是「數據框(data.frame)」,barplot識別不了,當然要報錯啦。從這裡我們應該看出來為什麼了解數據結構辣麼重要了吧(現在你可以翻過去看看「R語言學習第2天--R語言數據結構」)。在這裡我們可以通過as.matrix函數將數據框轉化為矩陣,還有其他非常有用的數據類型檢驗及轉換的函數,大家可以自己練習(檢驗數據類型:is.numeric(), is.character(), is.vector(),is.matrix(), is.data.frame();數據類型強制轉換:as.numeric(), as.character(), as.vector(),as.matrix(), as.data.frame())。
不過barplot函數默認的圖比較醜,下面我們就要通過添加不同的參數來調節圖形的外觀。
step 2.1 調用RColorBrewer顏色包
之所以要調用RColorBrewer包,因為它裡面有已經搭好的顏色可供我們調用,這樣我們就不用為顏色搭配犯愁了。
source("http://bioconductor.org/biocLite.R")
if(!require(RColorBrewer,quietly=T)) { ####先判斷有沒有裝RColorBrewer這個包,如果沒有, require(RColorBrewer,quitely=T)運行結果為FALSE,取它的否定以後這個表達式的運行結果為TRUE,則運行{}中的語句,分別為安裝和加載RColorBrewer,該語句結構可以記住,換成其他包照樣適用。
biocLite("RColorBrewer")
require("RColorBrewer")
}
mycol1<-brewer.pal(8,"Accent")
mycol2<-brewer.pal(9,"Set1")
totcol<-rep(c(mycol1,mycol2),10) ###c(mycol1,mycol2)是將mycol1和mycol2兩個顏色向量合併到一起,共有9+8=17種顏色,為了防止這些顏色不夠用,利用rep()將這17種顏色再重複10次,即得到170種顏色,這樣就不怕顏色不夠用啦。
step 2.2 將pdf格式的圖片輸入到barplot_example.pdf這個文件中
data<-data[order(rowSums(data),decreasing=T),] ##可選步驟,但是為了使圖片展示更美觀些,我們將物種(矩陣的行)按豐度之和(按行求和)排了序,使豐度比例大的物种放在下面。
pdf(file="barplot_example.pdf",height=6,width=8) ###將圖形輸出到barplot_example.pdf文件中,並設置圖形的長和寬。
par(xpd=T,mar=par()$mar+c(1,1,1,11))###設置邊緣空白的大小,由於我們要在圖形的右側添加legend圖例,故將右側的空白設置的比較大,xpd=T表示允許將圖例畫在Plot region以外,也就是可以畫在邊緣空白處。
barplot(data,col=totcol,las=1,cex.names=0.8,ylab="Relative Abundance(x100%)",xlab="Sample",cex.lab=1.1,border = NA,legend=rownames(data),args.legend = list(x="right",bty="n",inset=-0.3,cex=0.7)) ###col=totcol 規定data矩陣中的每行所畫出的方塊的顏色;las=1表示x和y軸的標籤(如A1)是水平的;cex.names=0.8表示x,y軸的標籤(如A1)字體大小是默認值的0.8倍;ylab是y軸的標題,xlab同理;cex.lab控制標題的該標題字體大小;border=NA表示條形圖中每個色塊周圍沒有邊框顏色;legend=rownames(data)表示將data的行名設置為legend;args.legend的參數設置類似legend()函數,其中x=」right」表示將圖例畫在條形圖的右側,bty=」n」表示圖例外圍沒有邊線,inset=-0.3是對圖例位置進行了調整,你可以在[-1,1]區間內改動下這個值就能體會它的用處了,cex=0.7不用說是控制圖例字體的大小。
dev.off()###返回終端,此時圖形文件已完成。
提醒一下下載好genus_abundance.txt這個文件以後,要將它放到當前R的工作路徑下,才可以像上面那樣讀取,或者通過setwd()函數將genus_abundance.txt所在的路徑設置為工作路徑,如果不知道我在說什麼,請查看「R語言學習第1天--初識R」。
希望你們玩的開心!
That's all. Thank you!
請關注「小張聊科研」:搜索微信號「xzlky2015」,或長按二維碼識別關注。
↓↓↓