課堂講義請參考: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
沒有留言:
張貼留言
歡迎發表意見