ggplot2是R語言最流行的第三方擴展包老翘,包名中“gg”是圖形語法(grammar of graphics)的簡稱重荠,Wickham Hadley將這套語法詮釋如下:
一張統(tǒng)計圖形就是從數(shù)據(jù)到幾何對象(geometric object马篮,縮寫geom)的圖形屬性(aesthetic attribute秃励,縮寫aes)的一個映射傍念。此外歪架,圖形中還可能包含數(shù)據(jù)的統(tǒng)計變換(statistical transformation股冗,縮寫stats),最后繪制在某個特定的坐標系(coordinate system和蚪,縮寫coord)中止状,而分面(facet)則可以用來生成數(shù)據(jù)不同子集的圖形。
1.ggplot2繪圖語言組件:
- 1.1 data:數(shù)據(jù)
- 1.2 mapping:一系列數(shù)據(jù)中的變量對應到圖形屬性的映射aes()
- 1.3 layer:圖層攒霹,由幾何元素及統(tǒng)計變換組成
-1.3.1 geom:幾何對象怯疤,也即在圖中實際看到的元素
-1.3.2 stats:統(tǒng)計變換,對數(shù)據(jù)進行的某種匯總 - 1.5 scale:標度催束,將數(shù)據(jù)的取值映射到圖形空間集峦,如顏色,大小抠刺,形狀等表示不同的取值塔淤,展現(xiàn)標度的常見做法是繪制圖例和坐標軸
- 1.6 facet:分面,描述如何將數(shù)據(jù)分解為各個子集速妖,以及如何對子集作圖并聯(lián)合進行展示
- 1.7 coord:坐標系凯沪,描述了數(shù)據(jù)如何映射到圖形所在的平面,同時提供了看圖所需的坐標軸以及網(wǎng)格線
- 1.8 theme:主題买优,控制各點的精細顯示妨马,如字體大小及背景顏色
2.ggplot語法
2.1 ggplot語法架構(gòu)
2.2 繪圖語法構(gòu)成
ggplot(data = NULL, mapping = aes()) + # 基礎圖層挺举,不出現(xiàn)圖形元素
geom_XXX() + # 幾何圖層
stat_XXX() + # 統(tǒng)計變換
scale_XXX() + # 度量調(diào)整,調(diào)整具體的標度
coord_XXX() + # 坐標變換烘跺,默認為笛卡爾坐標系
facet_XXX() + # 分面系統(tǒng)湘纵,將某個變量進行分面變換
guides() + # 圖例調(diào)整
theme() # 主題設定
2.2.1 ggplot()
ggplot()是底層繪圖函數(shù),其中data為主要是數(shù)據(jù)框(data.frame)格式的數(shù)據(jù)集滤淳;MAPPING 變量的視覺通道映射梧喷,用來表示變量 x 和 y,還可以用來控制顏色(color)脖咐,大衅痰小(size)或形狀(shape)等視覺通道;STAT 表示統(tǒng)計變換屁擅,與 stat_xxx()相對應偿凭,默認為“identity”(無數(shù)據(jù)變換);POSITION 表示繪圖數(shù)據(jù)系列的位置調(diào)整派歌,默認為“identity”(無位置調(diào)整)弯囊。
2.2.2 geom_xxx(),stat_xxx()
通常情況下胶果,繪圖使用幾何對象函數(shù) geom_xxx()匾嘱,只有當繪圖表涉及統(tǒng)計變換時,才會用統(tǒng)計變換函數(shù) stat_xxx()早抠,比如繪制帶誤差線的均值散點圖或者柱形圖等霎烙。根據(jù)函數(shù)輸入的變量總數(shù)與數(shù)據(jù)類型,大致可以將函數(shù)分為三個大類蕊连,六個小類悬垃。
https://mubu.com/doc/1Oz9rtR8kne
2.2.3 aes() 視覺通道映射
視覺映射參數(shù)需要個性化映射時(也即一一對應),此時參數(shù)應寫在aes()內(nèi)部咪奖,而如果是需要統(tǒng)一設定某些圖表元素對象時盗忱,應將參數(shù)寫在aes()外部
- color
指定點,線羊赵,和填充區(qū)域輪廓的顏色趟佃。 - fill
指定填充區(qū)域顏色。 - alpha
指定顏色的透明度昧捷。0(完全透明)~ 1(不透明) - stroke
輪廓線條的粗細 - size
指點的尺寸或線的寬度闲昭,默認單位是 mm,可以在 geom_point()函數(shù)繪制的散點圖上靡挥,添加 size的映射序矩,從而實現(xiàn)氣泡圖。 - group
分組映射的變量 - fontface
使用的字形跋破,plain=常規(guī)體簸淀,bold=粗體瓶蝴,italic=斜體,bold.italic=粗斜體 - family
字體內(nèi)置只有三種:sans, serif, mono租幕,但是可以指定字體(可用 extrafont 擴展包)舷手,需要提前設置好字體,然后才可以用family來修改字體劲绪。 - angle
指角度男窟,只有部分幾何對象。如geom_text()函數(shù)中的文本放置角度贾富,geom_spoke()函數(shù)中的短棒的擺放角度歉眷。 - vjust和 hjust
是與位置調(diào)整有關的視覺通道映射參數(shù)。其中颤枪,vjust 是指垂直位置微調(diào)汗捡,在(0, 1)區(qū)間的數(shù)字或位置字符串汇鞭。0=“button”, 0.5="middle", 1="top"凉唐,hjust 是指在水平位置的微調(diào)庸追,在(0霍骄, 1)區(qū)間的數(shù)字或位置字符串:0=“l(fā)eft”, 0.5="center", 1="right"。 - linetype
是指線條的類型(數(shù)字或字符線型)淡溯。白線(0="blank")读整,實線(1="solid"),短虛線(2="dashed")咱娶,點線(3="dotted")米间,點橫線(4="dotdash"),長虛線(5="longdash")膘侮,短長虛線(6="twodash") - shape
點的形狀屈糊,為[0, 25]區(qū)間的 26 個整數(shù)
2.2.4 scale_X_XX() 度量調(diào)整
度量調(diào)整用于控制變量映射到視覺對象的具體細節(jié),比如:x軸和 y 軸琼了、透明度逻锐、輪廓顏色、填充色雕薪、線形狀昧诱、形狀等,它們都有對應的度量函數(shù)所袁。根據(jù)視覺通道映射的變量屬性盏档,可以將度量函數(shù)分成數(shù)值型和類別型變量兩大類?
ggplot2 的默認度量為scale_xxx_identity():scale_color_identity(), scale_fill_identity(), scale_shape_identity(), scale_linetype_identity(), scale_alpha_identity(), scale_size_identity(), scale_discrete_identity(), scale_continuous_identity()
- x,y軸
連續(xù)變量:scale_x_continuous()燥爷,scale_y_continuous()蜈亩,scale_x_log10()/sqrt()懦窘,scale_x_log10()/sqrt(),scale_x_reverse() 稚配,scale_y_reverse()
離散變量:scale_x/y_discrete() - colour奶赠,fill 輪廓及填充色
連續(xù)變量:scale_colour/fill_continuous(),scale_colour/fill_distiller()药有,scale_colour/fill_gradient()毅戈,scale_colour/fill_gradient2(),scale_colour/fill_gradientn()
離散變量:scale_colour/fill_discrete()愤惰,scale_colour/fill_brewer()苇经,scale_colour/fill_manual() - alpha 透明度
連續(xù)變量:scale_alpha_continuous()
離散變量:scale_alpha_discrete(),scale_alpha_manual() - shape 性狀
離散變量:scale_shape()宦言,scale_shape_manual() - size 大小
連續(xù)變量:scale_size()扇单,scale_size_area()
離散變量:scale_size_manual()
2.2.5 coordinate 坐標系
- 直角坐標系(rectangula coordinate)
coord_cartesian():默認的直角坐標系
coord_fixed():固定縱橫比的直角坐標系
coord_flip():坐標軸反轉(zhuǎn),參數(shù)與 coord_cartesian一致
coord_trans():將數(shù)據(jù)轉(zhuǎn)換為想要的形式奠旺,再進行作圖蜘澜,最常見的是取對數(shù) - 極坐標系(polar coordinate):
coord_polar():將坐標系從直角坐標系轉(zhuǎn)換為極坐標系。 - 地理坐標系(geographic coordinate)
coord_map()函數(shù)
coord_quickmap()函數(shù)
2.2.6 guide 圖例
調(diào)整連續(xù)變量的圖例:guide_colorbar()/guide_colourbar()响疚,guide_legend()
調(diào)整離散變量的圖例:guide_legend()
也可以在 scale_xxx()度量中指定 guide 類型鄙信,guide="colorbar"或 guide="legend"
2.2.7 theme 主題系統(tǒng)
主題系統(tǒng)包括繪圖區(qū)背景、網(wǎng)格線忿晕、坐標軸線條燈圖表細節(jié)部分
文本(text):element_text()
矩形(rect):element_rect()
線條(line):element_line()
element_back:表示設置為無
2.2.8 位置調(diào)整
- 在 geom_xxx()函數(shù)中装诡,參數(shù) position 表示繪圖數(shù)據(jù)系列的位置調(diào)整,默認為“identity”
- position參數(shù):position_dodge()践盼,水平并排放置 鸦采;position_identity(),位置不變咕幻;position_stack()渔伯,垂直堆疊;position_fill()肄程,百分比填充锣吼;position_jitter(),擾動處理绷耍;position_jitterdodge()吐限,并排抖動 ;position_nudge()褂始,整體位置微調(diào)
2.2.9 色彩搭配
- RColorBerwer 調(diào)色代碼:通過display.brewer.all()顯示
- 離散型顏色主題:
# Library(RColorBrewer)
p + scale_fill_brewer(palette="Set1")
# Library(viridis)
p + scale_fill_viridis(option = "plasma", discrete = TRUE)
# Library(wesanderson)
p + scale_fill_manual(values=wes_palette("Darjeeling1")[c(1,3,5)])诸典,
p + scale_fill_manual(values = c("#E7298A", "#66A61E", "#E6AB02"))
- 連續(xù)型顏色主題:
# Library(RColorBrewer)
p + scale_fill_distiller(palette = "RdYIBu")
# Library(viridis)
p + scale_fill_virdis(option = "viridis", descrete = FALSE)
# 自定義連續(xù)的顏色條,mean(df$age)表示 age 均值對應中間色 white
p + scale_fill_gradien2(low = "#00A08A", mid = "white", high="#FF0000", midpoint = mean(df$age))
# R 語言預色調(diào)色板 terrain.colors()
p + scale_fill_gradientn(colors = terrain.colors(10))
Reference
R語言數(shù)據(jù)可視化之美-專業(yè)突變繪制指南(增強版)崎苗,張杰