簡(jiǎn)單介紹一下ggplot2
既然要做“系列”當(dāng)然要先介紹一下主角-ggplot2。ggplot2是一個(gè)十分強(qiáng)大的R語(yǔ)言可視化包。它的核心理念是將繪圖與數(shù)據(jù)分離,數(shù)據(jù)相關(guān)的繪圖與數(shù)據(jù)無(wú)關(guān)的繪圖分離。它是按圖層作圖的,一個(gè)語(yǔ)句做一個(gè)僅包含基礎(chǔ)作圖單元的圖層,然后通過(guò)不同圖層的疊加最后成圖。大繁至簡(jiǎn),就像你學(xué)會(huì)了基本的漢子就能組成任何語(yǔ)句,表達(dá)你想表達(dá)一切,這種通過(guò)基礎(chǔ)元素的疊加組合可以實(shí)現(xiàn)任何圖,限制畫(huà)圖的將只有你的想象力。除了作圖,ggplot2也將基本的統(tǒng)計(jì)融入其中,可以說(shuō)是數(shù)據(jù)玩家的得意兵器。
理解ggplot2從兩點(diǎn)開(kāi)始:
1,ggplot2將繪圖視為一種映射。作圖的根本目的是什么?就是把大量的數(shù)據(jù)用直觀的圖形展示出來(lái),本質(zhì)就是一種數(shù)據(jù)和圖形的對(duì)應(yīng)關(guān)系,也可以說(shuō)是一種映射。而ggplot2就是從這種理念出發(fā)的,它把作圖直接看成一種從數(shù)學(xué)空間到圖形元素空間的映射。簡(jiǎn)單理解對(duì)于分類數(shù)據(jù)來(lái)講可以將不同分類映射到不同的顏色或者不同的形狀,把連續(xù)數(shù)據(jù)映射成柱子的高度,線段的長(zhǎng)度等等。從這一點(diǎn)理解數(shù)據(jù)會(huì)有助于后期對(duì)圖的設(shè)計(jì)。
2,ggplot2的圖層疊加思想。ggplot2不去定義復(fù)雜的圖形,如瀑布圖,棒棒糖圖。為什么不呢?一旦定義了暴露給使用者的接口必定有限,所以畫(huà)出的圖就局限在繪圖包設(shè)定的圈子里了,不但可操作性差且你要在小本本里記住每一個(gè)圖用哪個(gè)包,如何調(diào)參,太不友好。ggplot2只定義各種底層組件(如線條、方塊),使用者可以用這些基本組件根據(jù)自己需求來(lái)合成復(fù)雜的圖形,這使它能以非常簡(jiǎn)潔的函數(shù)構(gòu)建各類圖形,一層一層往上加,語(yǔ)法上很好理解。
綜上,ggplot2繪圖理念如下:Plot(圖)= data(數(shù)據(jù)集,主要是data frame)+ Aesthetics(美學(xué)映射,比如將變量映射給x,y坐標(biāo)軸,或者映射給顏色、大小、形狀等圖形屬性)+ Geometry(幾何對(duì)象,即基本的底層組件)。
介紹幾個(gè)基礎(chǔ)概念
Layer(圖層):現(xiàn)在很多P圖的軟件都有圖層的概念(如photoshop)??梢园褕D層想象成僅包含各種圖形元素的透明玻璃,一層一層疊加成復(fù)雜的圖形,例如第一層是坐標(biāo)軸,第二層是不同的點(diǎn),第三層是圖例,那么組合在一起就是一張散點(diǎn)圖。不同圖層直接直接用“+”連接就可以。你可以單獨(dú)對(duì)每一個(gè)圖層進(jìn)行修改、增加統(tǒng)計(jì)量、甚至改動(dòng)數(shù)據(jù)。
Coordinate(坐標(biāo)):坐標(biāo)系統(tǒng)控制了圖形的坐標(biāo)軸。坐標(biāo)是整張圖的參照物,影響所有圖形元素。最常用的是直角坐標(biāo)軸、極坐標(biāo)軸等,還可以對(duì)坐標(biāo)軸進(jìn)行變換以使得圖形看起來(lái)更加優(yōu)雅,如對(duì)數(shù)坐標(biāo)。
Scale(標(biāo)度):標(biāo)度是一種函數(shù),它控制了數(shù)學(xué)空間到圖形元素空間的映射。連續(xù)數(shù)據(jù)可以映射到坐標(biāo)軸,也可以映射到圖形的大小;分類數(shù)據(jù)可以映射成為不同的形狀、顏色。
Facet(位面):位面是控制分組繪圖的方法和排列形式。
安裝加載
install.packages("ggplot2")
library(ggplot2)
數(shù)據(jù)準(zhǔn)備
ggplot一般使用數(shù)據(jù)框
phenotype <- read.table('Test.txt', header=T)
ggplot2畫(huà)圖的一般語(yǔ)法
ggplot(data = clin, mapping = aes(x = Tumor_Sample_Barcode, y = OS,colour=factor(ORR))) + geom_bar(stat = 'identity',position='dodge')+xlab('')+ylab('')+
+theme(panel.grid.major.x=element_blank(), axis.text.x=element_text(angle=45, hjust=1), legend.position="top")
1,ggplot:指整張圖,包括background和title
2,“+”:ggplot2使用圖層將各種圖形元素逐步添加組合,從而形成最終結(jié)果。
3,data:第一層必須是原始數(shù)據(jù)層,data參數(shù)控制數(shù)據(jù)來(lái)源,注意數(shù)據(jù)形式只能是數(shù)據(jù)框格式
4,mapping:aes參數(shù)控制了對(duì)哪些變量進(jìn)行圖形映射,以及映射方式,aes是Aesthetic的縮寫(xiě)。它將Tumor_Sample_Barcode映射到X軸,將OS映射到Y(jié)軸,將ORR變?yōu)榉诸悢?shù)據(jù)后映射為不同的顏色。
5,第二層為條形圖(geom_bar),geom表示幾何對(duì)象,它是ggplot中重要的圖層控制對(duì)象。每個(gè)geom對(duì)象都需要有數(shù)據(jù)輸入,數(shù)據(jù)可以從第一層中自動(dòng)讀取,也可以在aes參數(shù)中直接設(shè)置。而且每個(gè)geom還默認(rèn)搭配某種統(tǒng)計(jì)變換(stat),geom_bar默認(rèn)的統(tǒng)計(jì)變換是count(計(jì)數(shù)),這里我們調(diào)整成了identity,及不做任何變換直接展示。position表示位置調(diào)整(Position adjustments)是針對(duì)同一圖層內(nèi)元素的位置進(jìn)行微調(diào)的方法。它包括五種設(shè)置:stack(推疊放置)、dodge(并列放置)、fill(百分比堆疊)、identity(不做任何改變直接顯示出來(lái))、jitter。
6,legend(包括backgroud、text、title),用theme來(lái)調(diào)整
7,其他文字部分的調(diào)整可以增肌整個(gè)圖的可讀性,如xlab('')+ylab('')
關(guān)于ggplot2先介紹這些,后期會(huì)陸續(xù)介紹怎么利用他畫(huà)常見(jiàn)的圖~