幾何圖形與統計轉換

結合 ggplot 的幾何圖形與統計轉換可以讓使用者產生各種新穎的圖形,以下幾張圖是以 count 這個統計轉換後,配合不同的幾何圖形所得到的結果。

my.plot <- ggplot(diamonds, aes(carat)) + xlim(0, 3)
my.plot + stat_bin(aes(ymax = ..count..), binwidth = 0.1, geom = "area")

r-package-ggplot2-tutorial-ggplot-55

my.plot + stat_bin(
  aes(size = ..density..), binwidth = 0.1,
  geom = "point", position="identity"
)

r-package-ggplot2-tutorial-ggplot-56

轉換完的資料

如果您有一些已經經過統計轉換的資料,只是想要單純將資料畫出來,可以使用 stat_identity 這個統計轉換,它會依據原始資料的類型直接選擇適合幾何圖形來呈現。

不同的資料來源

ggplot 有一個比較特別的功能就是可以讓不同的圖層有不同的資料來源,可以將相關的幾個資料集畫在一起,例如在使用模型預測資料時,繪製預測值。

library(nlme)
model <- lme(height ~ age, data = Oxboys, random = ~ 1 + age | Subject)
age_grid <- seq(-1, 1, length = 10)
subjects <- unique(Oxboys$Subject)
preds <- expand.grid(age = age_grid, Subject = subjects)
preds$height <- predict(model, preds)

畫出模型的預測值:

my.plot <- ggplot(Oxboys, aes(age, height, group = Subject)) + geom_line()
my.plot + geom_line(data = preds, colour = "#3366FF", size= 0.4)
r-package-ggplot2-tutorial-ggplot-57

預測值

畫出模型的殘差值,並加入平滑曲線:

Oxboys$fitted <- predict(model)
Oxboys$resid <- with(Oxboys, fitted - height)
my.plot %+% Oxboys + aes(y = resid) + geom_smooth(aes(group=1))
r-package-ggplot2-tutorial-ggplot-58

殘差值