這篇主要是介紹怎麼利用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"), |
圖:
