這篇主要是介紹怎麼利用R
的ggplot2
去寫一個generalized的畫圖函數
先載入資料,轉成data.table
,以及把factor
的欄位都轉成character
1 | library(ggplot2) |
目標是把下面這張圖做成一個generalized plotting function
來應付各種需求
畫圖程式如下:
1 | statDT <- diamondsDT[ , .(cnt = .N, mean = mean(price), sd = sd(price)), by = .(cut)] %>>% |
第一步,我們先能夠產出ggplot2
的aes
,讓他能吃characters
1 | # 利用aes_string來達成,為什麼要用bquote,下面那段程式說明 |
第二步,我們將statDT
用函數算出來,這邊大量使用data.table
的技巧
1 | getStatDTFunc <- function(DT, calVar, byVars, |
所以這樣一來,statDT
的產生也能用函數產生了,最後就是寫畫圖函數了
1 | boxPlotFunc <- function(data, x, y, colour = NULL, |
這裡有幾點要說明
rel
是ggplot2
的相對大小的函數,ggplot2
預設的text大小是11
,則rel(0.8) = 11 * 0.8 = 8.8
的size- ggplot2參數預設值可以參考這裡
最後簡單的測試一下:
簡單功能測試:
1 | boxPlotFunc(diamondsDT, "cut", "price") |
測試一下其他參數:
1 | statDT <- getStatDTFunc(diamondsDT, "price", "cut", "label", c("%i", "%f"), |
圖: