統計R語言實作筆記系列 – 2D視覺化進階 ggplot()的基本架構(二)

上一篇介紹 ggplot 基本架構的教學文章當中,主要示範如何把數據轉換成圖形的方法,接著要來介紹的剩下三個部份,則是影響最終圖形樣式的輔助指令,它們包括改變繪圖座標的 coord 、佈景主題  theme 以及控制圖形輸出的 facet 。

為方便比較,一樣先送上作者自行分類的 ggplot 基本功能圖解:

ggplot-2-framework-功能圖解

本文繪圖以內建資料「 ChickWeight 」為例,先使用 str() 觀察資料集的基本資訊:

> str(ChickWeight)

Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and ‘data.frame': 578 obs. of 4 variables:

$ weight: num 42 51 59 64 76 93 106 125 149 171 …$ Time : num 0 2 4 6 8 10 12 14 16 18 …

$ Chick : Ord.factor w/ 50 levels “18″<“16″<“15″<..: 15 15 15 15 15 15 15 15 15 15 …

$ Diet : Factor w/ 4 levels “1″,"2″,"3″,"4″: 1 1 1 1 1 1 1 1 1 1 …

從結果可知, ChickWeight 當中有兩個數值變數 weight 、 Time ,一個順序變數 Chick 以及一個分類變數 Diet 。

了解資料屬性永遠是資料視覺化的第一步,這裡將利用上一篇文章介紹過的 geom 等指令來繪圖,以下就不再贅述。

進階 ggplot:用 coord 大玩圖形座標

常見資料繪圖的格式不外乎建立再以 x 軸、 y 軸垂直交錯而成座標系統上,但是透過 coord ,也可以把兩軸改為以圓形為主的座標系統,畫成類似雷達圖的樣子。

以 coord 中的 polar 座標形式為例,基本語法如下:

> coord_polar
function (theta = “x", start = 0, direction = 1)

在 coord_polar 當中, theta 參數指定圖形的視角(從 X 座標或 Y 座標), start 參數(預設是 0 )代表圖形的旋轉角度( 12 點鐘方式), direction 以 1 或 -1 指定順時鐘或逆時鐘。為了方便比較,先繪製一張正常版本的數據圖形如下:

> W1<-ggplot(data=ChickWeight)
> W1 + geom_point(aes(x=Time, y=weight, col=Diet))

# 指定ChickWeight資料集當中的Time為X軸,weight為Y軸,並依照Diet變數的分類上色進行區別,以geom_point繪製點狀圖。

ggplot-範例-點圖

接著利用 coord 變化座標:

> W1+geom_point(aes(x=Time, y=weight, col=Diet))
+ coord_polar()

# 指定ChickWeight資料集當中的Time為X軸,weight為Y軸,並依照Diet變數的分類上色進行區別,以coord_polar繪製雷達圖。

ggplot-範例-雷達圖

以相同的圖形為例,假如改以 Y 的視角繪圖,改變座標排列順序之後,結果則會變成如下圖所示:

> W1+geom_point(aes(x=Time, y=weight, col=Diet))+coord_polar(theta="y", start=5, direction=-1)

ggplot-範例-雷達圖-變形

進階 ggplot:透過 theme 調整圖形佈景

使用過 Office 軟體的人應該都對佈景主題這個詞不陌生,一組設定好的佈景主題可以方便使用者改變視覺呈現的風格,包括色彩、線條、背景、圖形細節與位置等等,而這就是 theme() 在 ggplot 當中的功用。

由於 theme() 的使用稍嫌複雜,因此先從圖形開始看起吧:

> W1+geom_point(aes(x=Time, y=weight, col=Diet))+ coord_polar(theta="y", start=5, direction=-1)
+theme(panel.background = element_rect(fill = “transparent", color = “green", size=5, linetype=3))

# 僅有最後一行是新增的部分,其餘和 coord 中的最後一個例子相同

ggplot-範例-主題設計

回頭觀察 theme() 的基本語法如下:

> theme
function (…, complete = FALSE)

表面上雖然看不出來 theme() 要如何使用,實際上它已經包含了所有可修改的圖型主題參數,使用者若希望指定圖形呈現的各種細節,都需要自行到 theme() 當中尋找對應的參數進行修改。

在上面的圖例中,先藉由「 panel.background 」指定繪圖區域的樣式,並配合樣式函數「 element_rect() 」來登載要改變的部分。

element_rect 的基本語法如下:

> element_rect
function (fill = NULL, colour = NULL, size = NULL, linetype = NULL, color = NULL)

其中各參數的意義分別是:  fill 指定底色, colour 及 color 都是指邊界顏色, size 則是邊框粗細, linetype 從1~6有幾種不同的線條可供選擇。

theme() 中可選擇的圖形修改對象相當相當多,各種線條、文字或顏色的參數不勝繁數,各位可從由此連結往 ggplot2 Index Page 尋找。

 

進階 ggplot:以 facet 保留圖形多重輸出

作者較早之前的文章 2D 視覺化入門裡曾介紹過利用 par ( mfrow =()) 把多張圖形放在同一個視窗內地方法,在 ggplot 當中, facet 則提供類似但是比較性更強的多圖共存功能,而且使用上也非常容易,例如以具有 4 種 level 的分類變數作為 facet 參數,就能自動依照 4 種 level 繪圖進行比較。

先從 par(mfrow=()) 的例子來看,要先指定切割的數量:

> par(mfrow=c(3,3))

# 分割圖形視窗為3X3

以下進行 7 種基本繪圖,詳細說明可參考 2D 視覺化入門

> hist(sleep$extra)
> barplot(sleep$extra)
> pie(pct2, labels=lbls2)
> boxplot(sleep)
> plot(density(sleep$extra))
> qqplot(sleep$extra,rivers)
> barplot(rivers)

圖形輸出的結果如下:

接著利用 ggplot 與 facet 來繪圖,此處以 facet_wrap 為例:

> W1 +geom_point(aes(x=Time, y=weight, col=Diet))

+ facet_wrap(~Diet)

# 最後一行才是新增的部分,其餘與 coord 的第一個圖例相同。

以分類變數輸入 facet 的好處便是方便比較不同分類下的數值趨勢是否有差異,此外, facet 也有多種風格可供採用,例如facet_grid 的例子:

> W1 +geom_point(aes(x=Time, y=weight, col=Diet))

+ facet_grid(~Diet)

更多精彩內容,千萬別錯過:

* 統計R語言實作筆記系列 – 2D視覺化進階 GGPLOT()的基本架構(一)

* 統計R語言實作筆記系列 – 用 SHINY 套件極速打造你的商業智慧分析網站!

* 統計R語言實作筆記系列- 直線ABLINE()、曲線CURVE()與多邊形POLYGON()

* 統計R語言實作筆記系列 – 2D視覺化入門

* EXCEL 交互參照必學神器, 用 LOOKUP 系列函數一鍵搞定資料比對 : HLOOKUP篇

 

(Visited 19,604 times, 4 visits today)

Wendell.Huang

科技公司嫌棄太活潑,消費品牌挑剔太沉悶..., 經常必須解釋自己在學什麼, 不小心就摔破對方眼鏡的跨領域玩家。

One Comment

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *