這篇文章講資料的視覺化分析。
繪圖套件 ggplot2
ggplot2 是一套龐大且強大的繪圖系統。其概念是使用結構性語法,先指定資料,再指定變數,然後指定幾何元素,最後處理標題與標註資料以及背景的主題樣式。這個處理模式幾乎等同於在 Excel 等試算表類統計軟體中的處理模式。
ggplot2 的繪圖元件
- 資料(data):繪圖的資料來源,一般會先使用
ggplot()
來輸入資料。 - 幾何元件(geometry):繪圖的類型,例如柱狀圖、散佈圖、盒鬚圖等。
- 座標系統(coordinate system):繪圖的座標系統,預設是
coord_cartesian()
,即笛卡兒座標系。
ggplot2 的語法結構
ggplot2 的語法結構一般遵循下面:
以 ggplot2 繪製的徒刑必須要包含至少兩個必要的元件——ggplot(data)
和 geom_funtion(mapping)
。
ggplot2 繪圖入門示例
雙變數
我們使用 R Lang 內建的資料集 mpg 來進行練習。mpg 是 1999年到 2008年之間 38 個流行車型的燃油經濟資料。
我們假設要繪製一個散佈圖,x 變數和 y 變數分別是 displ(發動機排氣量)和 hwy(高速油耗)。那麼我們的程式碼如下:
繪製結果如下:
三個及以上變數
如果我們需要繪製三個以上的變數,我們可以使用顏色來區分:
繪圖結果如下:
套用多個幾何元件圖層
我們可以將多個繪圖元件作為不同的圖層疊加在一起:
繪圖如下:
回歸模型的套用
我們也能在 ggplot2 中套用不同的統計模式,像是迴歸模型(regression models)。假設我們想求得發動機排氣量和高速油耗之間的關聯性,可以使用簡單線性迴歸,類似在上面使用 geom_smooth()
的方式,只需要加上 method = “lm” 即可(lm 代表 linear regression),繪圖的時候 ggplot2 也會自動預設加上信賴區間。
geom_smooth()
預設支援常用的幾種回歸模式。例如線性回歸(lm)、廣義線型模型(glm)、廣義加成模型(gam),還可以自定義模型。例子如下,使用 這個自定義方程。
繪圖如下:
套用不同的主題
要套用不同的主題,調用不同的主題函式即可。
aes 或 geom_$function 引數
- x:設定 x 變數。
- y:設定 y 變數。
- alpha:透明度。數值為 0~1。學習前端的讀者應該會很好理解。
- color:前景顏色,可以使用顏色的英文或者 16 進位碼。
- fill:背景顏色。
- linestyle:線條的類型,0~6 代碼分別為:空白(blank)、實線(solid)、虛線(dashed)、點線(dotted)、點虛線(dotdash)、長虛線(longdash)、雙虛線(twodash)
- size:線條粗細
- shape:圖形類別,0~16
- weight:權重
排列位置調整
排列方式會有分散排列(dodge)、填滿在某個元件之中(fill)、堆疊(stack)、分散點排列(jitter)、推移(nudge)等。
加入誤差棒
有時候在繪圖的時候,我們會在圖上面加註誤差棒,以了解數據的誤差範圍。若誤差棒的長度愈長,代表其誤差愈大。誤差棒的長度一般是標準差(standard deviation)或標準誤(standard error)。ggplot2 可使用 geom_errorbar()
,geom_linerange()
,geom_pointrange()
或 geom_crossbar()
等。
各種統計用圖的資料類型一覽
變數數目 | 變數類型 | 圖形類型 | ggplot2幾何元件 | 解釋與適用資料 |
---|---|---|---|---|
1 | 連續 | 直方圖 | geom_histogram() | 觀察數據分佈的大致情況,應用在連續性的數值上 |
1 | 連續 | 多邊圖 | geom_freqpoly() | 觀察數據分佈的大致情況,和直方圖很類似,只不過繪製成折線,適合疊加多個變數後比較 |
1 | 連續 | 點圖 | geom_dotplot() | 觀察數據分佈的大致情況,和直方圖很類似,只不過以點來呈現 |
1 | 連續 | 核密度估計圖 | geom_density() | 觀察數據分佈的大致情況,將直方圖轉換成折線方式呈現,使用機率密度的函數來計算繪製 |
1 | 連續 | 分位圖 | geom_qq, geom_qq_line() | 適用於監測數據分佈是否常態 |
1 | 連續 | 盒鬚圖 | geom_boxplot() | 了解資料的分散狀況,可從盒鬚圖中觀察出中位數、四分位數和最大最小值 |
1 | 離散 | 柱狀圖/長條圖 | geom_bar() | 比較一個變數小規模的資料分析,適用於離散型資料 |
2 | 連續 | 散佈圖 | geom_point | 將兩個變數以點呈現,可協助瞭解兩者之間有無關聯,可搭配 geom_smooth() |
2 | 連續 | 面積圖 | geom_area() | |
2 | 連續 | 折線圖 | geom_line() | 連續性的資料,把所有的點用線段連結起來,觀察 x 軸的變數序列上 y 的變化情形 |
2 | 連續 | 鬚軸圖 | geom_rug() | 在兩個軸上精簡表示兩個連續變數的圖,通常適合小資料集 |
2 | 連續 | 平滑曲線圖 | geom_smooth() | 把所有的資料平滑化後繪製,一般協助觀察並找出資料的特徵 |
2 | 連續 + 離散 | 柱狀圖 | geom_col() | |
2 | 連續 + 離散 | 盒鬚圖 | geom_boxplot() | 了解資料的分散狀況,可從盒鬚圖中觀察出中位數、四分位數和最大最小值 |
2 | 連續 + 離散 | 提琴圖 | geom_violin() | 同時顯示數據分布和其機率密度,結合盒鬚圖和核密度估計圖 |
3 | 連續 | 等高線圖 | geom_contour(), geom_contour_fill() | GIS 地形高度資料 |
3 | 連續 | 影像網格 | geom_raster() | 地圖資料,和 geom_tile() 與 geom_rect() 相同,當所有的圖磚大小相同時,繪製地圖的效率較 geom_tile() 或 geom_rect() 來得高 |
3 | 連續 | 圖磚 | geom_tile(), geom_rect() | 繪製矩形範圍,定義邊界(數值範圍四個角落,geom_rect)或圖磚大小(geom_tile)。通常使用作為地圖上或熱點圖的資料呈現 |