🏠
重點提要 :
■ 用折線圖來觀察趨勢
■
通過管道符號(pipeline)以連接 dplyr
和
ggplot
■ 同時從各個面向比較趨勢
載入library裡面的套件並載入comics數據集
::p_load(dplyr,tidyr,ggplot2,plotly,gridExtra)
pacmantheme_set(theme_get() + theme(
text=element_text(size=8), legend.key.size=unit(10,"points")
))= read.csv("data/comics1.csv",stringsAsFactors=F) %>% as_tibble D
讓我們計算並繪圖觀察每年首次亮相的新角色數量。
count(D, year) %>% # 計算每年新角色的數量
ggplot(aes(year, n)) + geom_line() # 並繪製一個折線圖
count()
和 ggplot() + geom_line()
是一個非常方便的組合。我們可以通過一個額外的類別變數publisher
來比較DC和Marvel每年新角色數量的的變化趨勢。
count(D, year, publisher) %>%
ggplot(aes(year, n, col=publisher)) +
geom_line(size=1)
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
i Please use `linewidth` instead.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.
觀察長期趨勢的時候,如果趨勢線看起來波動太大,我們可以增加測量週期,資料合併通常有助於抵消隨機誤差,讓趨勢線變得比較平滑;由於DC在1980年之前不活躍,所以我們:
=seq(1980,2010,5)
breaks= filter(D, year>=1980, year<=2010) %>%
D2 mutate(period = cut(year,breaks,breaks[-1],T) %>%
%>% as.integer)
as.character table(D2$period, useNA='ifany')
1985 1990 1995 2000 2005 2010
690 763 926 659 817 1073
ggplot(D2, aes(period, fill=publisher)) +
geom_bar(position='dodge')
像這樣通過條狀圖來判斷長期趨勢要容易得多,不是嗎?
從上圖我們可以看到,漫畫產業在2000年經歷一個低谷之後,Marvel似乎比DC更早、更強勁地反彈回來。
結合 dplyr
和
ggplot
的強大功能,我們可以一次比較多個方面的趨勢。讓我們從一個簡單的圖開始,該圖視覺化了每個(好人/壞人/中立)陣營的比率如何變化。
count(D2, period, align) %>%
group_by(period) %>%
mutate(rate = n/sum(n)) %>%
ggplot(aes(period, rate)) +
geom_line(aes(col=align))
這一個趨勢是否因出版商而異呢?
count(D2, period, publisher, align) %>% # 以類別型變數計算個數
group_by(period, publisher) %>% # 根據period和publisher來對資料進行分組
mutate(rate = n/sum(n)) %>% # 新增一個欄位rate並將計算的個數轉換為比率
ggplot(aes(period, rate)) +
facet_grid(~publisher) + # 每一個窗格畫一個出版商
geom_line(aes(col=align), size=1) + # 使線條更粗
geom_point() # 增加圓點使其看起來更好
🚴 練習:
讓我們嘗試以出版商和性別來比較(好人/壞人/中立)陣營的趨勢。正如下面的圖表中看到的,在4個單獨的繪圖區塊中有4個模式(there’d
be 4 patterns in 4 separate
panels.)。你可以通過修改程式區塊來製作下面的圖表嗎?
# count(D2, period, publisher, align) %>% # 以類別型變數計算個數
# group_by(period, publisher) %>% # 根據period和publisher來對資料進行分組
# mutate(rate = n/sum(n)) %>% # 新增一個欄位rate並將計算的個數轉換為比率
# ggplot(aes(period, rate)) +
# facet_grid(~publisher) + # 每一個窗格畫一個出版商
# geom_line(aes(col=align), size=1) + # 使線條更粗
# geom_point() # 增加圓點使其看起來更好