ggplot2 001 圖形語法

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)

ggplot語法框架

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

geom & stat
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è)突變繪制指南(增強版)崎苗,張杰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐粱,一起剝皮案震驚了整個濱河市舀寓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肌蜻,老刑警劉巖互墓,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒋搜,居然都是意外死亡篡撵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門豆挽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來育谬,“玉大人,你說我怎么就攤上這事帮哈√盘矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵娘侍,是天一觀的道長咖刃。 經(jīng)常有香客問我,道長憾筏,這世上最難降的妖魔是什么嚎杨? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮踩叭,結(jié)果婚禮上磕潮,老公的妹妹穿的比我還像新娘翠胰。我一直安慰自己容贝,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布之景。 她就那樣靜靜地躺著斤富,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锻狗。 梳的紋絲不亂的頭發(fā)上满力,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音轻纪,去河邊找鬼油额。 笑死,一個胖子當著我的面吹牛刻帚,可吹牛的內(nèi)容都是我干的潦嘶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼崇众,長吁一口氣:“原來是場噩夢啊……” “哼掂僵!你這毒婦竟也來了航厚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤锰蓬,失蹤者是張志新(化名)和其女友劉穎幔睬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芹扭,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡麻顶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舱卡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澈蚌。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灼狰,靈堂內(nèi)的尸體忽然破棺而出宛瞄,到底是詐尸還是另有隱情,我是刑警寧澤交胚,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布份汗,位于F島的核電站,受9級特大地震影響蝴簇,放射性物質(zhì)發(fā)生泄漏杯活。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一熬词、第九天 我趴在偏房一處隱蔽的房頂上張望旁钧。 院中可真熱鬧,春花似錦互拾、人聲如沸歪今。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寄猩。三九已至,卻和暖如春骑疆,著一層夾襖步出監(jiān)牢的瞬間田篇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工箍铭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泊柬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓诈火,卻偏偏與公主長得像兽赁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345