2017年11月15日 星期三

R | ggplot: Point plot & Box plot

這個禮拜 UBC 開了一個關於 ggplot 的 workshops,因為是分成三堂講,所以比上次濃縮在兩個小時講完清楚,這邊會寫三篇先的介紹。

課堂講義請參考:R Graphics with Ggplot2 - Day1

想要更深入的可以參考這個網站:R for Data Science

好了,開始吧!

首先,你需要先安裝這幾個 packages 和檔案庫(dataset):

library(ggplot2)
library(MASS)
data(mpg)
data(economics)

檔案 mpg 裡面有幾個 variables: cty, cyl, displ, hwy, drv
可以用 class() 去看各個的型態

class(mpg$cty)
>[1] "integer"

class(mpg$displ)
>[1] "numeric"

class(mpg$drv)
>[1] "character"

class(mpg$class)
>[1] "function"

也可以用 levels() 查看各個的 level

levels(mpg$drv)
>NULL

levels(factor(mpg$drv))
>[1] "4" "f" "r"

levels(factor(mpg$cyl))
>[1] "4" "5" "6" "8"

因為 drv 和 cyl 不是 factor,所以顯示 NULL,但可以把它們設成 factor,於是 cyl 的四個整數就不再是數字。設成 factor 的原因之後會講到。

基本句法是:ggplot(data, aes(x, y)) + geom

data 是你想處理的檔案,在這裡是 mpg。
aes() 裡面是你要的 X-axis 和 Y-axis 參數,例如 drv。

可以把前面的 ggplot(data, aes()) 指定為一個 object,後面再加各種圖顯示看看,這樣就不用每次都要重複。例如:

p <- ggplot(mpg, aes(cyl, displ))
p + geom_point()

可以查看 p 是什麼型態

class(p)
>[1] "gg" "ggplot"

可以把圖存成 pdf 檔案

ggsave("file_name")


1. 點圖:geom_point()

即 Excel 中的 scatter plot,常見的點圖。

ggplot(mpg, aes(x = hwy, y = cty)) + geom_point()

可以把 x = 和 y = 省略,變成:ggplot(mpg, aes(hwy, cty) + geom_point()

可以把點設成有顏色的,放在 aes() 裡面就可以: colour = 
如果想要依照 class 的類別設顏色的話,就是 colour = class。

ggplot(mpg, aes(hwy, cty, colour = class)) + geom_point()

如果 variables 的型態是 factor 或 text 的話,每個參數會有不同的顏色。
例如:drv = "character",或是 class = "function"。



在 variables 的原本型態不是 factor 或 text 的情況下(通常是數字,包括  integer 和 numeric),會把數字以漸層的顏色顯示。例如:cyl = "integer"。

ggplot(mpg, aes(hwy, cty, colour = cyl)) + geom_point()



如果把 variables 設成 factor 的話,那每個參數就會變成一個 character,會以不同的顏色表示,而非色階。

ggplot(mpg, aes(hwy, cty, colour = factor(cyl))) +
            geom_point()



如果要指定所有數據點的顏色,就要把指令放在 geom_point() 裡面,用 color = ' '

ggplot(mpg, aes(displ, cty)) +
            geom_point(color = 'skyblue')



也可以用不同的形狀顯示數據點: shape = 

ggplot(mpg, aes(hwy, cty, shape = factor(year))) +
            geom_point()



也可以一點的大小呈現: size = 

下面同時呈現顏色和大小的不同。

ggplot(mpg, aes(hwy, cty, colour = cyl, size = displ)) +
       geom_point()



也可以同時用三種方式呈現三個不同的 variables。

ggplot(mpg, aes(hwy, cty, colour = cyl,
                          size = displ,
                          shape = factor(year))) +
            geom_point()



2. Boxplot: geom_boxplot()

Box plot 的中間那一條是 medium (中間值,不是平均值),就是一個數列中, 最中間的那一個。上面那條線代表數列中的 25th percentiles (百分位),也就是中間值到最大值間的中間值,叫 Q3;下面那條線則是數列中的 75th percentiles,就是中間值到最小值間的中間值 ,叫 Q1。Q1 和 Q3 之間的距離,也就是 Q3 - Q1,叫做 IQR (interquartile range)。(還是不懂的可以看這個影片

Box plot 的上下會有兩條鬚鬚,叫 whisker。它的長度在 R 裡的預設是 1.5,也就是:
To max end: Q3 + 1.5 * IQR
To min end: Q1 - 1.5 * IQR



X-axis 需要是 factor (function) 或是 text (character),例如 cyl 雖是整數,但沒把它設為 factor,就會變成下面這樣。

ggplot(mpg, aes(factor(cyl), cty)) + geom_boxplot()



如果每個點要有自己的 box,需要把 X-axis 設成:factor(cyl)

ggplot(mpg, aes(factor(cyl), cty)) + geom_boxplot()



如果是用 drv 或 class 當 X-axis,因為它本身就是 character,所以不用把它設成 factor。

ggplot(mpg, aes(drv, hwy)) + geom_boxplot()



如想想依其他參數的數據大小排的話,可以用 reorder(x, var),會由小至大(由左到右)排列,所以句法會是:aes(reorder (x, var), y))

ggplot(mpg, aes(reorder(drv, cty), cty)) + geom_boxplot()



上面是依 cty 的大小由左至右,由小至大排列,Y-axis 可以設為一樣是 cty,也可以設其他的,不需要一樣,例如設為 displ。

ggplot(mpg, aes(reorder(drv, cty), displ)) + geom_boxplot()



可以看到上面兩張圖都是依 cty 的大小排列,由左到右皆為 r - 4 - f,但是出來的卻不同。

如果想要依特別的順序排列,需要把參數設為 factor,包括 character (text) 也是,然後再用 levels = c(' ',' ',' ') 指定你要的排序,所以句法會是:aes(factor(x, levels = c()), y)

ggplot(mpg, aes(factor(drv, levels = c('f', 'r', '4')),
                       cty)) +
       geom_boxplot()



X-axis 依指定的 f - r - 4 的順序排列。


結果發現寫了兩個圖就太長了,剩下的放下篇吧。(這樣會超過三篇了說)

下篇的另外四種圖請看這:Ggplot | Histogram, Bar graph & Line plot









沒有留言:

張貼留言

歡迎發表意見