這邊存筆記,細節教學請參考這裡:Introduction to R - Part 2
library(ggplot2)
data(mpg)
ggplot 是 ggplot2 中的 function,記得在跑之前要放 library(ggplot2),先跑過這個再跑圖。
點圖:geom_point()
ggplot(mpg, aes(x = displ, y = cty)) + geom_point()
p <- ggplot(mpg, aes(displ, cty)) + geom_point() ## default 是 x, y,所以可以省略。
p
class(p) ## class() 告訴你這個 object 屬於什麼
ggsave("plot1.pdf") ## 把圖存成 pdf file
ggplot(mpg, aes(hwy, cty, colour = class)) + ## 加入顏色,依 class 分色。
geom_point()
# 分兩層時,+ 要放在一行的最後才能跑。
ggplot(mpg, aes(displ, class, color = drv)) +
geom_point()
ggplot(mpg, aes(x = hwy, y = cty, colour = cyl)) +
geom_point()
## 指定 cyl 的顏色,如果沒指定顏色,會自動用色階。
ggplot(mpg, aes(x = hwy, y = cty, colour = factor(cyl))) + geom_point()
## 指定 cyl 裡的各個數字(分類)用不同顏色。
和上面不同的是如果沒有加 factor,會用連續數字畫色階,例如圖旁的標示會出現 4-7 的色階。如果用 factor,cyl 裡面有的數字(分類)才會出現,例如 cyl 裡面只有 4, 5, 7, 8,圖旁邊的 figure legend 就只會出現這四個點和四種顏色。
ggplot(mpg, aes(displ, cty)) +
geom_point(color='blue')
## 如果要指定顏色的話,要放在 geom_point() 裡面,而不是放在 aes() 裡面。
ggplot(mpg, aes(x = hwy, y = cty, shape = factor(year))) + ## 用點的樣式來區分
geom_point()
ggplot(mpg, aes(hwy, cty, size = displ)) +
geom_point(color='blue') ## 用點的大小來區分
ggplot(mpg, aes(x = hwy, y = cty, colour = factor(cyl),
shape=factor(year), size=displ)) + ## 可以合併所有的參數在一張圖裡
geom_point()
Histogram: geom_histogram()
ggplot(mpg, aes(cty)) +
geom_histogram(bins=10) ## number of bins. (overridden by binwidth; defaults to 30)
ggplot(mpg, aes(x=cty)) +
geom_histogram(binwidth = 1, color='blue')
## The width of the bins. The default is to use bins bins that cover the range of the data.
ggplot(mpg, aes(x=cty)) +
geom_histogram(aes(y=..ncount..))
## ncount: count, scaled to maximum of 1 (Y-axis 範圍變成 0 到 1。)
頻率圖 frequency polygons:geom_freqpoly()
ggplot(mpg, aes(x=cty)) + geom_freqpoly(bins = 10, color='blue')
ggplot(diamonds, aes(x=price, colour=cut)) + geom_freqpoly(bins = 10)
(ps. histogram & freqpoly 細節語法可以參考這裡:histograms & frequency polygons)
Bar graph: geom_bar()
ggplot(mpg, aes(x=cty, color=cyl)) + geom_bar(bins = 10)
Box plot: geom_boxplot()
ggplot(mpg, aes(factor(cyl), cty)) + geom_boxplot()
ggplot(mpg, aes(factor(cyl), cty)) +
geom_boxplot(coef = NULL) ## length of the whiskers as multiple of IQR (defaults to 1.5)
ggplot(mpg, aes(x=reorder(drv, cty, median), y=cty)) +
geom_boxplot() ## Y-axis 數值由左到右排列成由小到大
ggplot(mpg, aes(factor(drv, levels=c('f', 'r', '4')), cty)) + ## 指定 X-axis 排序
geom_boxplot()
(ps. box plot 細節語法可以參考這裡:box plot)
Smoothers
A “smoother” is a line overlaid on the plot that can help bring out the dominant pattern by leaving out some of the variability (“wigglyness”) in the data.
加一條曲線圖(regression line),預設有 confidence intervals 的灰色陰影。
geom_point() +
geom_smooth() ## regression line
ggplot(mpg, aes(x=displ, y=hwy)) +
geom_point() +
geom_smooth(se=FALSE, method = "lm")
#把陰影去掉:se=FALSE
# lm: least-squares linear regression
ggplot(mpg, aes(displ, hwy, shape=factor(cyl))) +
geom_point() +
geom_smooth(method="lm")
p1 <- ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(colour=factor(cyl))) +
geom_smooth(aes(y = cty), se=FALSE) ## regression line
p2 <- ggplot(mpg, aes(displ, hwy))
#把第一層 aes() 設成一個獨立 layer,這樣就不用每次重複打。
p2 +
geom_point(aes(colour=factor(cyl))) +
geom_smooth(method="lm") ## least-sequres linear regression
p2 +
geom_point(aes(colour=factor(cyl))) +
geom_smooth(aes(colour=factor(cyl)), method="lm")
# 把 aes() 設在 smoother 裡就會每個 factor 都有一個 regression line。
# 跟 p2 相比
p3 <- ggplot(mpg, aes(displ, hwy, color=factor(cyl))) # 把 aes() 設在第一層會有同樣的效果
p3 +
geom_point() +
geom_smooth(method="lm")
Grouping
p2 <- ggplot(mpg, aes(displ, hwy))
p2 +
geom_point() +
geom_smooth(aes(group=factor(cyl)), method="lm", se=FALSE)
ggplot(mpg, aes(x=displ, y=hwy)) +
geom_point() +
geom_smooth(se=FALSE, method = "lm", formula = y~poly(x,2))
以上功能已寫在 R Script (R-ggplot),有興趣的可以下載來跑跑看。如果剛開始跑時出現 error 訊息的話,先跑最前面三行 library,之後再跑下面的 function 試試看。
註記:這篇當初在寫的時候因為懶得弄圖,加上沒花太多時間去把每種圖搞懂,所以很簡約。不過後來有補好幾篇詳細的,可以看這一串文章:ggplot。
稍微瀏覽一下您ggplot2相關的文章,真是相見恨晚
回覆刪除比付費課程都還清楚了
謝謝分享
很開心對你有幫助,其實寫這些原本只是用來當我的筆記,目的是當我半年沒用之後,再回來看能夠快速 pick up,不用再從頭研究一遍。XD
回覆刪除