因?yàn)樽鍪虑椴幌矚g拖拖拉拉耐床,所以打算每次啃一章倘感,一個(gè)月啃完這本書(shū)。
建立一個(gè)正式的語(yǔ)法系統(tǒng)包括:數(shù)據(jù)集咙咽,幾何對(duì)象老玛,映射集合,統(tǒng)計(jì)變換,位置調(diào)整蜡豹,坐標(biāo)系和分面麸粮。
ggplot2的核心思想是圖層和映射
一 數(shù)據(jù)集
ggplot(data=mpg)
畫(huà)出來(lái)的一片白,作用是將數(shù)據(jù)集載入镜廉。
二 幾何對(duì)象
總結(jié)一下ggplot2的幾種常用的集合對(duì)象弄诲,剩下的各種圖形基本上都是在此基礎(chǔ)的變化。如氣泡圖是點(diǎn)圖的變化娇唯,餅狀圖是bar圖的變化
geom_line | 線圖 |
geom_point | 點(diǎn)圖 |
geom_histogram | 柱狀圖 |
geom_boxplot | 箱線圖 |
geom_bar | bar圖 |
geom_smooth | 平滑曲線圖 |
三 映射
將橫軸和縱軸齐遵,按照幾何對(duì)象的種類(lèi),映射到圖形上塔插,就完成了畫(huà)圖的主要過(guò)程梗摇。
- 散點(diǎn)圖
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy))
想用不同的顏色代表分類(lèi),就多映射一個(gè)變量
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy,color=class))
四 統(tǒng)計(jì)變換
以條形圖為例
ggplot(data=diamonds)+geom_bar(mapping=aes(x=cut))
我們并沒(méi)有映射Y軸想许,但是為什么Y軸有數(shù)值呢伶授?這是因?yàn)閮?nèi)部進(jìn)行了統(tǒng)計(jì)變換
統(tǒng)計(jì)變換:stat(statistical transformation)
如果我們?geom_bar,就會(huì)發(fā)現(xiàn):
stat的默認(rèn)值是count流纹,也就是計(jì)數(shù)糜烹。也就是說(shuō),geom_bar內(nèi)部是做過(guò)統(tǒng)計(jì)變換的漱凝,用的方法是count疮蹦。
如果將geom_point換成stat_count
ggplot(data=diamonds)+stat_count(mapping=aes(x=cut))
我們會(huì)發(fā)現(xiàn),畫(huà)出的圖形是一樣的茸炒。
五 位置調(diào)整
a<-ggplot(diamonds)+geom_bar(mapping=aes(x=cut,color=cut))
b<-ggplot(diamonds)+geom_bar(mapping=aes(x=cut,fill=cut))
library(cowplot)
plot_grid(a,b)
注:fill是將顏色映射到柱形圖內(nèi)部挚币,而color是將顏色映射到輪廓。
- 通過(guò)position的參數(shù)變換扣典,可以調(diào)整柱形圖的位置。
ggplot(diamonds)+geom_bar(mapping=aes(x=cut,fill=clarity),position="fill")
ggplot(diamonds)+geom_bar(mapping=aes(x=cut,fill=clarity),position="identity")
ggplot(diamonds)+geom_bar(mapping=aes(x=cut,fill=clarity),position="dodge")
- 同理慎玖,我們發(fā)現(xiàn)贮尖,由于數(shù)據(jù)是處理好精確到個(gè)位的,畫(huà)散點(diǎn)圖時(shí)可能會(huì)出現(xiàn)不同的點(diǎn)堆疊到一起了趁怔,效果不是很好湿硝。于是加一個(gè)jitter隨機(jī)擾動(dòng)
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy),position="jitter)
六 坐標(biāo)軸
coord_flip 將坐標(biāo)軸橫過(guò)來(lái)
ggplot(data=mpg,mapping=aes(x=class,y=hwy))+geom_boxplot()+coord_flip()
coord_polar 將條形圖轉(zhuǎn)化成餅圖
ggplot(diamonds)+geom_bar(mapping=aes(x=cut,fill=cut),show.legend = F,width=1)+coord_polar()
六 分面
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy))+facet_wrap(~class,nrow=2)
按照某個(gè)橫縱坐標(biāo)分面
ggplot(data=mpg)+geom_point(mapping=aes(x=displ,y=hwy))+facet_grid(drv~cyl)