看到今天的標題應該知道要做什麼了吧?是的~就是將資料整理,並以圖表呈現的「資料視覺化」(data visualization)。資料視覺化是資料呈現的一種非常重要的手段,有時候,直接看數字不夠直觀,可能還會造成混亂。為了清晰有效地傳遞資訊,資料視覺化使用統計圖形、圖表、資訊圖表和其他工具。可以使用點、線或條在視覺上傳達定量資訊。當然,這一切都是建立在是「有效」的視覺化,因為有效的視覺化才能夠幫助使用者分析和推理資料和證據,使複雜的資料更容易理解和使用。該怎麼達成有效的視覺化呢?這就考驗到製作者的能力了!製作者可以根據特定的分析任務(如進行比較或理解因果關係),以及該任務要遵循的圖形為設計原則。表格通常用於尋找特定的度量,而各種類型的圖表用於顯示一個或多個變數的資料中的模式或關係。
由於 R 語言是適合處理統計資料的語言,所以它將資料以圖片呈現的能力也不差,圖表的種類也非常的多。那麼~接下來,廢話不多說,我們直接來看看 R 呈現圖表資料的能力吧!
首先從 R 裡面最基本的繪圖 package 講起。
library(learningr) # 匯入 dataset
head(obama_vs_mccain) # 查看前 6 筆資料
plot(obama_vs_mccain$Income, obama_vs_mccain$Turnout) # 直接用 plot() 畫出來,'$' 代表鎖定 Income 和 Turnout 這兩欄的資料來畫圖
執行結果為:
以上圖表也可以用 with() 來完成
with(obama_vs_mccain, plot(Income, Turnout)) # with() 左邊放資料集,右邊放要畫進去的欄位
執行結果為:
有沒有發現和第一種畫法不一樣的地方啊?沒錯,第二種的 x, y 軸會「乾淨」的呈現欄位名稱喔!另外 plot() 裡面左邊是 x 軸,右邊放 y 軸~ 另外,我們還可以幫上面的點點換個顏色、把點點換成其他符號、加上主標題、x, y 軸級距、單位等等。
with(obama_vs_mccain, plot(Income, Turnout, col='#ffb6c1')) # col 放顏色,可以用 16 進位代碼,也可以直接打上顏色的英文,有些有支援,例如 pink, purple 之類的
執行結果為:
with(obama_vs_mccain, plot(Income, Turnout, col='#ffb6c1', pch=8)) # pch 是資料點的圖案,=之後放編號
執行結果為:
plot() 預設會使用圓圈來標示資料點,我們可以透過 pch 參數來使用不同的資料點符號,可用的符號如下:
with(obama_vs_mccain, plot(Income, Turnout, col='#ffb6c1', pch=8, main='Income & Turnout', xlab = 'Income ($US)', ylab='Turnout (%)', xlim=c(15000,45000), ylim=c(0,100)))
# main 是放主標題,xlab 和 ylab 放各自標題,lim 則是設定級距
執行結果為:
除了非常簡易的 plot(),R 有另一個強大的繪圖工具,就是 ggplot2,我們繼續使用剛剛的資料集來看看兩者的差異吧!
library(ggplot2)
ggplot(obama_vs_mccain, aes(Income, Turnout)) +
geom_point()
ggplot(obama_vs_mccain) +
geom_point(aes(Income, Turnout)) # 與上面結果相同,只是把 aes 放後面
執行結果為:
是不是看起來精細許多呢?它一樣能換顏色、圖案......
ggplot(obama_vs_mccain, aes(Income, Turnout)) +
geom_point(color='#ffb6c1', shape=8) # shape 概念和 pch 一樣
執行結果為:
我們還能用 facet_wrap() 來分割圖表,進行不同 variables 之間的比較。例如以下的 code 就是比較不同 Region 的 Income 和 Turnout 分佈情況。
ggplot(obama_vs_mccain, aes(Income, Turnout)) +
geom_point() +
facet_wrap(~ Region, ncol = 5)
執行結果為:
再來,我們用不同的資料集來畫更多的圖吧!首先使用 mpg 這個資料集,內容是個廠牌汽車各項特點的比較。
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = manufacturer))
# color 代表以哪個欄位作為上色依據,會形成圖例在右側
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, alpha = manufacturer, shape = manufacturer)) # alpha 為漸層,shape 可以不像 pch 那麼單調,放入欄位後可以此欄位為依據
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy)) # 用 geom_smooth 換成線條
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv)) # 同時畫多條線
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, color = drv)) # 換個顏色
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))+
geom_smooth(mapping = aes(x = displ, y = hwy)) # 同時用 point 和 smooth 表現
執行結果為:
換個資料集畫不同的圖吧!這次用的是鑽石的資料集~
ggplot(data=diamonds) +
geom_bar(aes(cut, price), stat='identity') # geom_bar 是長條圖
ggplot(data=diamonds) +
geom_bar(aes(cut, price), stat='identity') +
coord_flip() # 換邊
ggplot(data=diamonds) +
geom_bar(aes(cut, price, fill=clarity), width=0.5, stat='identity') # fill 是填滿
ggplot(data=diamonds) +
geom_bar(aes(cut, price, fill=clarity), width=0.5, stat='identity', position='dodge') # 使用 dodge 排列
執行結果為:
bar <- ggplot(data = diamonds) +
geom_bar(
mapping = aes(x = cut, fill = cut),
show.legend = FALSE,
width = 1
) +
theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL) #x, y name
bar + coord_flip()
bar + coord_polar() # 雞冠圖
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot() # 盒狀圖
執行結果為:
畫個地圖吧~
library(maps)
nz = map_data('nz')
ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black")
執行結果為:
今天就先到這邊,R 還有許多圖表畫法等但大家發掘喔~可以參考這邊?(https://r-graph-gallery.com/)
明天要和大家介紹文字雲喔~~