入門 ggplot2 的圖形語法
作者:安建才
知乎:安建才 - 知乎
歡迎關注支持!
本文首發於作者知乎,
已獲作者授權以原創形式發布!
原文鏈接戳文末【閱讀原文】
ggplot2 包是 Hadly Wickham 開發(除 ggplot2 外,還有 plyr 和 reshape2 包)的一款通過 「+」,以圖層疊加的搭配組合,易於實現數據可視化的 R 包。ggplot2 以美輪美奐的統計製圖能力位居各類繪圖軟體排名前列,同時此包功能也在增加。此文簡單介紹 ggplot2 的基本原理和操作,便於大家對 ggplot2 快速入門。
ggplot() 作為泛型函數(gplot() 能快速作圖,卻不是泛型函數),能對任意類型的 R 對象進行可視化操作,這是 ggplot2 的精髓所在。
在 Hadly 的 ggplot2 官方文檔中,Hadely 這樣對 Wilkinson 的圖形語法進行了描述:「一張統計圖形就是從數據到集合對象(geometric object, 縮寫為 geom,包括點、線、條形等)的圖形屬性(aesthetic attributes, 縮寫為 aes, 包括顏色、形狀、大小等)的一個映射。此外,圖形中還可能包含數據的統計變換(statistical transformation, 縮寫為 stat),最後繪製在某個特定的坐標系(coordinate system, 縮寫為 coord)中,而分面(facet, 指將繪圖窗口劃分為若干個子窗口)則可以用來生成數據中不同子集的圖形。」 因此,在 ggplot2 中,圖形語法中至少包括了如下幾個圖形部件:
1、 數據(data)
2、 映射(mapping)
3、 幾何對象(geom)
4、 統計變換(stat)
5、 坐標系(coord)
6、 分面(facet)
7、 標度(scale)
這些組件之間用 「+」,以圖層(layer)的方式來粘合構圖的,所以圖層是 ggplot2 中一個重要的概念;在掌握基本的圖形部件基礎上,要完成一幅高質量的統計繪圖,仍然需要其他圖形部件來進一步擴展,這包括了:
8、 主題(theme)
9、 位置(position)
10、存儲和輸出
接下來將對上述概念展開講述
1、在 ggplot2 中,所接受的數據集必須為數據框(data.frame)格式。
如內置的 mtcars 數據集:head(mtcars)
2、這種數據框的格式好處是數據易於存儲,也能保留原有的繪圖參數下,用 %+% 方便地變更已有數據集。如:library(ggplot2)np <- ggplot(mtcars,aes(mpg,wt,colour=cyl))+geom_point()npn
mtcarsc <- transform(mtcars,mpg = mpg^2)np %+% mtcarscn
library(reshape2)nmtcarsm <- melt(mtcars, id = c("mpg","disp","hp","drat","wt","qsec","vs","carb"))nhead(mtcarsm)n
1、 概念
aes() 函數是 ggplot2 中的映射函數, 所謂的映射即為數據集中的數據關聯到相應的圖形屬性過程中一種對應關係, 如:
p1 <- ggplot(data = mtcars)nsummary(p1)n
p2 <- ggplot(data = mtcars, mapping = aes(x = wt, y = hp, color = gear))nsummary(p2)n
2、 設定和映射
映射是將一個變數中離散或連續的數據與一個圖形屬性中以不同的參數來相互關聯, 而設定能夠將這個變數中所有的數據統一為一個圖形屬性。如:
p <- ggplot(mtcars, aes(wt, mpg))n#設定散點的顏色為藍色np + geom_point(color = "blue")n
3、 分組(group)
分組也是 ggplot2 種映射關係的一種, 默認情況下 ggplot2 把所有觀測點分為了一組, 如果需要把觀測點按額外的離散變數進行分組處理, 必須修改默認的分組設置。
p3 <- ggplot(data = mtcars, mapping = aes(x = wt, y = hp)) + geom_line()np3n
p4 <- ggplot(data = mtcars, mapping = aes(x = wt, y = hp, group = factor(gear))) + geom_line()np4n
具體應用如:
p <- ggplot(mtcars, aes(wt, mpg))np + geom_point()n
#更改顏色-連續變數np + geom_point(aes(color = qsec))n
#更改顏色-離散變數np + geom_point(aes(color = factor(gear)))n
#更改透明度np + geom_point(aes(alpha = qsec))n
#更改形狀np + geom_point(aes(shape = factor(gear)))n
#更改點大小np + geom_point(aes(size = qsec))n
#兩種顏色的疊加np + geom_point(color = "grey50", size = 5) + geom_point(aes(color = qsec), size = 4)n
#顏色和形狀的疊加np +geom_point(color = "grey50", size = 5) + geom_point(aes(shape = factor(gear)), size = 3)n
每一個幾何對象都有一個默認的統計變換, 並且每一個統計變換都有一個默認的幾何對象。正因如此, 這一設定將會使繪圖過程變的靈活多變。
具體應用如:
m <- ggplot(mtcars, aes(qsec, wt))nm + stat_smooth() + geom_point()n
#取消默認的置信區間nm + stat_smooth(se = FALSE) + geom_point()n
#更改置信區間和線條顏色nm + stat_smooth(fill = "red", size = 2, alpha = 0.5, color = "green") + geom_point()n
#用一元一次線性方程擬合nm + stat_smooth(method = "lm") + geom_point()n
#使用一元二次方程擬合nm + stat_smooth(method = "lm", formula = y ~ poly(x, 3)) + geom_point()n
#按cyl這個離散變數進行分組, 分別擬合數據m <- ggplot(mtcars, aes(y = wt, x = mpg, group = factor(cyl)))nm + stat_smooth(method = lm, aes(color = factor(cyl), fill = factor(cyl))) + geom_point( aes(color = factor(cyl)))n
在上述對數據和映射的講解中, 已經採用過」+」 來添加圖層,可以這樣理解 ggplot2 中的圖層:每個圖層可以代表一個圖形組件, 如已經介紹的幾何對象、統計變換等圖形組件, 這些組件以圖層的方式疊加在一起構成一個繪圖的整體;在每個圖層中的圖形組件又可以分別設定數據、映射或其他相關參數, 因此組件之間又是具有相對獨立性的。ggplot2 中圖層的設定是十分成功的, 因為這一過程是如此實用、方便而富有邏輯性。
在幾何對象中設定映射
前面已在 ggplot() 中設定了映射了關係, 這種映射關係是默認的, 我們可以在後面的幾何對象中沿用已設定的默認映射關係, 也可以隨時在幾何對象中進行更改。
#設定默認的映射關係np <- ggplot(mtcars, aes(x = mpg, y = wt, color = factor(gear)))n#沿用默認的映射關係來繪製散點圖np + geom_point()n
#添加圖層中的shape的映射關係np + geom_point(aes(shape = factor(carb)))n
#修改默認的y的映射關係, 注意圖中y軸名稱仍然以默認的wt表示np + geom_point(aes(y = carb))n
#刪除默認的color映射關係np + geom_point(aes(color = NULL))n
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()n#以cyl為分類變數np + facet_grid(. ~ cyl)n
#wrap與grid的區別np + facet_wrap( ~ cyl, nrow = 3)n
p + facet_wrap( ~ cyl, ncol = 3)n
p <- p + geom_smooth(method = "lm", se =F, aes(color = factor(cyl))) + geom_point(aes(color = factor(cyl)))np + facet_grid(vs ~ am)n
標度控制著數據到圖形屬性的映射, 更重要的一點是標度將我們的數據轉化為視覺上可以感知的東西, 如大小、顏色、位置和形狀。所以通過標度可以修改坐標軸和圖例的參數。標度函數如下:
位置函數坐標系函數經過以上過程講述,對 ggplot2 中的圖形語法有了基本了解,根據繪製圖形的效果可進行相對應的調參。ggplot2 入門與進階:ggplot2入門與進階(上) | 塞邇斯
R--ggplot2 包介紹學習:R----ggplot2包介紹學習 - Little_Rookie - 博客園
aHR0cDovL3FtLnFxLmNvbS9jZ2ktYmluL3FtL3FyP2s9cEYyVjdtVExWZzdwQ09FakNMdjVBQWNEeGRXS0tfQVA= (二維碼自動識別)
aHR0cDovL3N0dWR5LjE2My5jb20vY291cnNlL2NvdXJzZU1haW4uaHRtP2NvdXJzZUlkPTEwMDM1OTIwMDg= (二維碼自動識別)
aHR0cDovL3dlaXhpbi5xcS5jb20vci8wVDhYRDVmRVY4b29yZE5zOTJyRA== (二維碼自動識別)
如需轉載請聯繫EasyCharts團隊!
EasyCharts團隊出品帥的人都關注了EasyCharts團隊^..^~
QQ交流群:553270834
微信公眾號:EasyCharts
更多信息敬請查看: http://easychart.github.io/post/Easycharts/
推薦閱讀:
※第二篇——用幾分鐘了解R語言入門知識(續)
※第二講實踐:數據結構入門
※2017.07大數據入門學習計劃
※編寫R語言的樂趣 --第二關:數據結構入門
※HR Analyse
TAG:R编程语言 |