R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介
R語言數據可視化 ggplot2基礎1 ggplot2 圖形的分層語法 Layered Grammar 簡介
- 分層語法的組成(data-stat-geom-scale-coord-facet)
- 用分層語法理解一段ggplot2代碼
- Subplot 1
- Subplot 2
ggplot2是tidyverse包的一部分,tidyverse是Hadley Wickham及其團隊了為了能夠系統性處理數據、圖表開發的一個包。對我們統計人來說,盡管R語言提供了很多數據可視化的方法,但ggplot2依然是R語言做可視化的最優雅、最強大的包。gg的含義是grammar of graphics,這就暗示了ggplot2就是描述與建立圖形的語言。這一講我們介紹分層語法的主要內容,這些內容將幫助大家理解ggplot2的函數與命令。一些細節可以參考Hadley Wickham的文章A Layered Grammar of Graphics,這篇文章介紹了Hadley Wickham對圖形對象的理解,Layered Grammar的組成與應用等內容。
Hadley Wickham認為一個plot需要有下面的一些組成部分:
下面我們逐個介紹這些內容。
分層語法的組成(data-stat-geom-scale-coord-facet)
數據(data)當然是畫圖的基礎,但在分層語法中,數據與建立圖形的命令是獨立的,我們把代碼看成是一個映射(mapping),數據就是映射的輸入,圖形是映射的輸出,所以建立一種圖形的命令應該適用于不同的數據集,按Hadley Wickham的原話來講,就是Data are what turns an abstract graphic into a concrete graphic.
通常對輸入的數據集,我們可以做一些統計變換(statistical transformation, 簡稱stat)來讓圖形“好看”一點,下面是ggplot2中常用的stat:
stat是一個映射,它把原始數據作為輸入,然后用輸出的數據作為創建圖形的數據。實際上stat這一步就是我們所熟知的對原始數據做的統計處理。需要注意的是stat受刻度(scale)與坐標系統(coordinate system,簡稱coord)影響,比如平滑操作的話,在直角坐標系與極坐標系中平滑的效果肯定是不同的,即使都在直角坐標系中,不同坐標軸刻度下平滑的效果也是不同的。
幾何對象(geometric object, 簡稱geom)是一個抽象的對象,比如區間是一個抽象對象,我們可以用不同的渲染(rendering)方法來表現它,比如下面四種都是區間的渲染方法:
一個geom只能展示特定的圖形,比如散點圖對象只能展示散點圖,但我們可以通過參數調整散點的顏色、形狀、大小、位置等屬性;一個圖層包含一個geom,如果要添加另一個幾何對象,需要創建另一個圖層進行操作。
最后是關于面板(facet)的,面板的作用是在一個plot中展示多個subplot,比如下面的圖:
這是由1×31 \times 31×3的subplot構成的一個facet,第一個subplot是直角坐標系,第二個是semi-log坐標,第二個是極坐標。
用分層語法理解一段ggplot2代碼
我們來看一個簡單的例子,來學習一下怎么用分層語法的框架(data-stat-geom-scale-coord-facet)去理解一段ggplot2的代碼。
假設我們要創建下面這樣的圖形:
這是一個1×21 \times 21×2的facet,左邊的subplot是直角坐標系下鉆石的價格與克拉的關系;右邊的subplot是對數坐標系下鉆石價格與克拉的關系。我們暫時不介紹facet操作,下面針對這兩個subplot的ggplot2代碼進行分析。我們回顧一下分層語法的組成:layer(data-stat-geom)-scale-coord-facet,就會發現ggplot2作圖的代碼與分層語法完全一致,也就是說ggplot2是嚴格按照分層語法設計的。ggplot()開頭表示接下來要應用圖形語法創建圖形對象,第一步是創建圖層,每一個圖層包含數據、映射(aesthetic mapping)、幾何對象、統計變換、位置調整;第二步是指定scale以及坐標系統。
Subplot 1
這是創建第一個圖形所需要的ggplot2的代碼。用ggplot()開頭,然后用layer()創建圖層,這個圖層用的數據集是diamond;用aesthetic mapping是在指定變量,因為要畫鉆石價格隨克拉變化的關系,所以xxx軸是克拉,yyy軸是價格;幾何對象是點,也就是要畫散點圖,沒有指定其他參數,因此用的是默認樣式;stat與位置用identity,也就是恒等變換,說明我們不需要對原始數據進行統計處理或者位置調整。接下來分別指定xxx變量與yyy變量的scale,continuous表示讓刻度連續變化,不做其他的scaling;最后指定坐標系是直角坐標系。
Subplot 2
這是創建第二個圖形所需要的ggplot2的代碼。用ggplot()開頭,然后用layer()創建兩個圖層。第一個圖層的命令與subplot 1。第二個圖層的數據與映射與第一個圖層一樣,但幾何對象是smooth,表示我們希望第二個圖層創造的幾何對象是第一個圖層的散點圖的平滑曲線,stat也是smooth,后面的method = lm含義是我們用線性模型來smooth原始數據。重疊這兩個圖層,scale的時候把x,yx,yx,y變量都取log,然后在直角坐標系下展示,我們就可以得到subplot 2。
綜上,在了解了圖形的分層語法后,我們可以很容易把圖形與ggplot2的每一個命令聯系起來。
總結
以上是生活随笔為你收集整理的R语言数据可视化 ggplot2基础1 ggplot2 图形的分层语法 Layered Grammar 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UA PHYS515 电磁理论I 麦克斯
- 下一篇: UA MATH577 逻辑与可计算性1