圖表通常可以比表格或者文字敘述作出更有感染力的詮釋,R語言另外一個令人讚賞的就是圖表的表現了,而套件ggplot2
更是複習R語言的重點,接下來幾天,我們將進入R語言與機器學習見面會第4個主題:資料視覺化,來複習幾個常用圖表的使用方式。
ggplot2線圖函式
geom_line(mapping = NULL, data = NULL, stat = "identity", position = "identity",
...)
我們在資料夾MyR新增一支Day16.R
在Day16.R中輸入程式碼
#安裝並載入gcookbook
install.packages(c("ggplot2", "gcookbook"))
library(ggplot2)
library(gcookbook)
#製作簡單的資料(女生版1歲前身高曲線97分位)
BaybyGowth <- data.frame(
month = c(1, 2, 4, 6, 8, 10, 12),
height = c(57, 61, 67, 71, 74, 76, 79))
print(BaybyGowth)
#兒童生長曲線
#http://health99.hpa.gov.tw/doc/12024.pdf
#先畫基本線圖
ggplot(BaybyGowth, aes(x = month, y = height)) + geom_line()
執行結果:
每個1~2月的身高
沒有點的線就是少了靈魂,來加座標點。
在Day16.R中輸入程式碼
ggplot(BaybyGowth, aes(x = month, y = height)) + geom_line() + geom_point()
執行結果:
多了黑色的座標點
這個線圖發現1個問題:
第1次測量是57cm,但水平軸沒有標示明顯的間隔數字。
我們繼續編輯程式Day16.R
#(3)加上y軸的上下限
ggplot(BaybyGowth, aes(x = month, y = height)) + geom_line() + geom_point() + ylim(50, max(BaybyGowth$height))
執行結果:
剛剛y軸顯示的問題解決了!
感覺不太有精神,把座標給他點顏色瞧瞧!
在Day16.R中輸入程式碼
#(4)座標加上顏色(darkred)並且用pink色填滿
ggplot(BaybyGowth, aes(x = month, y = height, group = 1)) + geom_line() +
geom_point(size = 4, shape = 22, colour = "darkred", fill = "pink") + ylim(50, max(BaybyGowth$height))
我們使用R內建的資料集ToothGrowth,他是一個實驗維生素C劑量和牙齒生長長度關係的數據紀錄,實驗時同時以兩種給藥方式(柳橙汁(OG)或維生素C(VC)),剛好可以畫出2條線。
(The Effect of Vitamin C on Tooth Growth in Guinea Pigs)
在Day16.R中輸入程式
#(5)多條折線圖
#載入plyr
library(plyr)
#總結牙齒成長紀錄(60筆彙總成6筆)
tg <- ddply(ToothGrowth, c("supp", "dose"), summarise, length = mean(len))
#檢視整理完成的數據
tg
在Day16.R中輸入程式
#(6)用給藥方式來畫線(colour)
ggplot(tg, aes(x = dose, y = length, colour = supp)) +
geom_line(linetype = "dashed",size=4) +
geom_point(shape = 22, size = 5, fill = "white")
在劑量1.5單位以下,直接喝柳橙汁,牙齒長的比較長。
總結:天然ㄟ尚好!
線圖的進階:
講山形圖這名詞也許有少部分成員沒聽過,但下面這圖,看16個夏天心有戚戚焉的同學,共同的回憶,經典中的經典:
1997:世紀帝國一 AOE
2000:世紀帝國二 AOC 征服者入侵
其中,遊戲結束後的結算:
在Day16.R中輸入程式
#簡單的面積
#(7)製作簡單的世紀帝國資料
AoeStatistics <- data.frame(
民族 = c("法蘭西", "匈奴", "土耳其", "中國", "法蘭西", "匈奴", "土耳其", "中國", "法蘭西", "匈奴", "土耳其", "中國", "法蘭西", "匈奴", "土耳其", "中國"),
分數 = c(25, 25, 25, 25, 30, 20, 20, 30, 40, 10, 40, 10, 30, 0, 20, 50),
紀元 = c(-3000, -3000, -3000, -3000, -1000, -1000, -1000, -1000, 0, 0, 0, 0, 500, 500, 500, 500))
ggplot(AoeStatistics, aes(x = 紀元, y = 分數, fill = 民族)) +
geom_area(colour = "black", size = .2, alpha = .4) +
scale_fill_brewer(palette = "Blues", breaks = rev(levels(AoeStatistics$民族)))
執行結果:
征服者世界奇觀:
2014-10 攝於Sevilla,Spain
看到世界奇觀很震撼。