R語言高級繪圖 —?ggplot2

2017-03-24    編輯:諾禾致源

R語言有很多可自行下載的包,每個包都含有一些函數,可以實現很多不同的統計或繪圖功能。而ggplot2作為繪圖軟件包,與大多數的圖形軟件包不同,它有自己的一套圖形語法,不會局限于一些已經定義好的單一的統計圖形,而是可以根據你的需求量身定做。微生物基因組項目結題報告里面,很多圖形例如PCA 、PCoA、NMDS等的繪制都是通過ggplot2包完成的。

ggplot2的語法

245棋牌一張統計圖形,是從數據到幾何對象的圖形屬性的一個映射,此外,圖形中還可能包含數據的統計變換,最后繪制在某個特定的坐標系中,而分面則可以用來生成數據不同子集的圖形。


數據:245棋牌ggplot2使用的數據必須是一個數據框。


圖形屬性:圖形的顏色,形狀,大小等。


映射:245棋牌將數據中的變量與圖形屬性的對應關系,比如將一列值作為x軸坐標,另一列值作為y軸坐標,可以得到散點圖的映射,第三列值作為該散點的顏色比例,第四列值作為該散點的大小比例等。

ggplot2的應用

1)散點圖應用

#加載ggplot2包
> library(ggplot2)
#利用包內自帶的數據,mpg數據框。利用head函數查看該數據集的前六行。如下圖所示
> head(mpg)

#創建一個繪圖對象p,aes定義了映射方式,其中displ列為x值,hwy為y值,cyl作為因子定義了散點的顏色,由于沒有添加幾何對象,所以此步驟不會產生圖形
> p <-ggplot(data=mpg,aes(x=displ,y=hwy,colour=factor(cyl)))
#添加幾何對象-散點圖,此時會出現圖形,圖形的顯現方式為散點。橫縱坐標和圖例就是標度信息
> p + geom_point()

幾何對象:代表著你在圖中看到的圖形元素,比如點、線、矩形等。


統計變換:對數據的某種匯總,比如將數據分組計數,可以創建直方圖。


標度:用是將數據的取值映射到圖形空間,例如可以用顏色,大小或形狀來表示取值的不同。簡單來說就是從圖形到數據的映射關系,可以讓我們從圖中得出數據的信息,典型的標度是坐標軸和圖例。

坐標系:245棋牌我們通常使用的是笛卡爾坐標系,也有極坐標系、地圖投影。

分面:245棋牌將大量的數據進行拆分,分為若干個子集,用這些子集進行作圖,并聯合展示。

 

#再添加一個圖層,此次的幾何對象為平滑曲線
> p + geom_point() + geom_smooth()

#以上這個例子中用到了圖層、幾何對象、數據以及映射等概念。

2)PCA的作圖

PCA主成分分析,可以將高維數據進行降維處理。我們的OTU表格就是典型的高維數據,可以對其進行降維處理得到主成分PC1和PC2,然后將所有樣品都分解到這兩個成分方向,進行散點繪圖,可以直觀的看出樣品間的差異。首先需要一系列的統計處理,然后用ggplot2進行繪圖,過程如下:

#加載需要的三個包(需要先下載,再加載)
> library(ade4)
>library(ggplot2)
>library(grid)
#讀入OTU表格,設置表頭為列名,第一列為行名,文件是由\t分隔的
> data <-read.table("otu_table.even.txt", head=T,row.names=1,sep="\t")
#查看data數據的前六行,會出現如下的表格,每行代表一個OTU,每列代表一個樣品,表格中的數字代表該OTU在該樣品中的豐度信息
> head(data)

#讀入分組的表格,將樣品每6個分組成為CK,TN,TP組
> groups <- read.table("group.list", head=F)
#將data數據轉置
> data <-t(data)
#用dudi.pca函數對data數據進行處理,得到的結果存入pca對象中
> pca =dudi.pca(data[,1:ncol(t(data))], scannf=F, nf=5)
#查看pca的格式,它是一個13個元素的列表,我們可以根據不同的需求提取其中不同的部分進行下一步操作
> str(pca$li)
245棋牌#PC1和PC2的選取就是pca列表中li這個矩陣的第一列和第二列

#坐標軸的標簽格式,預先設定好,在繪圖時候可以直接使用
> pc1 <-floor(pca$eig[1]*10000/sum(pca$eig))/100
> pc2 <-floor(pca$eig[2]*10000/sum(pca$eig))/100
#數據處理到此為止,下面進行繪圖
#首先定義一個繪圖對象P,并設定數據使用plotdata數據框,其中PC1和PC2兩列作為繪圖的數據
> P<-ggplot(plotdata, aes(PC1, PC2))
#添加幾何對象,散點圖,圖形映射為組別決定顏色和形狀,點的大小是4,展示如下圖:
> P+geom_point(aes(colour=group,shape=group),size=4)

> PC2 = pca$li[,1]
> PC2 = pca$li[,2]
#構建一個作圖用的數據框,第一列是樣品名,第二,三列是PC1和PC2的值,第四列為分組信息
> plotdata <- data.frame(rownames(pca$li),PC1,PC2,groups$V2)
#將這個數據框的列名進行修改,方便理解列的意義
> colnames(plotdata) <-c("sample","PC1","PC2","group")
#查看plotdata數據框的格式,如下圖所示:
> head(plotdata)

注意:繪圖時,如果需要的話可以一步一步的添加幾何對象,成為一個個圖層,但之前的圖層信息也必須添加在前面。所以顯示的是類似累加的結構,綠色部分是新添加的圖層。
#添加另一個幾何對象,標題和坐標軸信息,用到了之前設定好的坐標軸格式,如下圖所示:
245棋牌> P+geom_point(aes(colour=group,shape=group),size=4)+labs(title="PCAPlot",x=paste("PC1(",pc1,"%)"),y=paste("PC2(",pc2,"%)"))

#添加兩條線x=0和y=0,分別使用vline和hline函數,線性是點狀線
> P+geom_point(aes(colour=group,shape=group),size=4)+labs(title="PCAPlot",x=paste("PC1(",pc1,"%)"),y=paste("PC2(",pc2,"%)"))+geom_vline(aes(xintercept=0),linetype="dotted")+geom_hline(aes(yintercept=0),linetype="dotted")

#添加分面展示,利用分組來進行分面,分兩行進行展示。由于本數據集并不龐大,所以分面顯示的優勢并不明顯,對于大數據集來說,分面顯示會十分有用。如下圖所示:
>P+geom_point(aes(colour=group,shape=group),size=4) +labs(title="PCAPlot",x=paste("PC1(",pc1,"%)"),y=paste("PC2(",pc2,"%)"))+geom_vline(aes(xintercept=0),linetype="dotted")+geom_hline(aes(yintercept=0),linetype="dotted")+facet_wrap(~ group, nrow=2)

以上主要介紹了ggplot2的基礎和使用方法,并用散點圖和PCA這兩個例子展示了ggplot2的使用方法, ggplot2還可以繪制很多其他類型的圖,它的圖層設定可以讓我們在一幅圖中組合不同的圖形,并且有很好的圖形優化功能,可以微調很多參數來繪制自己所期望的圖形。