# 周次:w13
# 任務:應用(資料框處理與繪圖)
# 姓名:楊世宏
# 日期:2021年4月28日
# 
# 解決Rstudio cloud圖形中文顯示問題
# install.packages("showtext")
library(showtext)
## Warning: package 'showtext' was built under R version 4.0.5
## Loading required package: sysfonts
## Loading required package: showtextdb
showtext_auto()

# # 3. 以圖層疊加的方式繪圖
# # (1) 建立基本圖形(長條圖)
# g1 <- ggplot(tcs2019, 
#              aes(x=agegroup, fill=i12.1))+geom_bar() #+geom_bar()預設為+geom_bar(position="stack")
# g1
# # 或者調整為並排的圖形
# g1 <- ggplot(tcs2019, 
#              aes(agegroup, fill=i12.1))+
#   geom_bar(position = "dodge")
# g1
# 
# # 或者調整為變成標準化的圖形
# g1 <- ggplot(tcs2019, 
#              aes(agegroup, fill=i12.1))+
#   geom_bar(position="fill")
# g1
# 
# # (2) 自訂標題、x軸與y軸名稱
# g2 <- g1+labs(title = "台灣民眾各年齡層遇到假新聞的經驗比較",
#               x="各年齡層",y="次數/比例",
#               subtitle="65+熟齡族與其他年齡有差異?",
#               caption="資料來源:台灣傳播調查資料庫")
# g2
# 
# # 調整y軸(是連續型的變數)的刻度
# g2.1 <- g2+scale_y_continuous(breaks = c(0,0.25,0.5,0.75,1) ,labels =c("0%","25%","50%","75%","100%"))
# g2.1
# 
# # 若是類別型的刻度
# g2.2 <- g2+scale_x_discrete("年齡分組",labels = c("18至35歲" = "18-35","36至49歲" = "36-49",
#                                               "50至64歲" = "50-64", "65歲以上" = "65 up"))
# g2.2 
# 
# # (3) 設定背景
# # 隱藏格線 
# g3.1 <- g2+theme(panel.grid.major = element_blank(),
#                  panel.grid.minor = element_blank()) 
# g3.1
# 
# # 背景空白
# g3.2 <- g2+theme(panel.background = element_blank()) 
# g3.2
# 
# # 標題置中
# g3.3 <- g3.2+theme(plot.title = element_text(vjust = 2, hjust = 0.5))
# g3.3
# 
# # 調整y軸標題的方向
# g3.4 <- g3.3+theme(axis.title.y = element_text(vjust = 0.5, hjust = 0.5, angle = 0))
# g3.4
# 
# # 內建的主題效果
# # theme_bw()
# # theme_dark() 
# # theme_classic()
# # theme_gray()
# # theme_linedraw()
# # theme_light()
# # theme_minimal()
# # theme_test()
# # theme_void()
# g3.5 <- g2+theme_classic()
# g3.5
# 
# # (4) 設定圖例
# g4 <- g3.4+scale_fill_discrete(name="接觸經驗",
#                                breaks=c("1", "2", "3"),
#                                labels=c("有遇到過假新聞", "從未遇過假新聞", "不知道是否遇過假新聞"))
# g4
# 
# # (5) 調整圖形為水平方向
# g5 <- g4+coord_flip() 
# g5
# 
# # (6) 在圖上加上次數/比例的文字
# # a. 若想於堆疊的長條圖上繪製文字 #geom_bar(position="stack")
# g1 <- ggplot(tcs2019, 
#              aes(x=agegroup, fill=i12.1))+geom_bar() #+geom_bar()預設為+geom_bar(position="stack")
# g1+geom_text(stat="count",aes(label=..count..),
#              position = position_stack(vjust = 1),
#              size = 3, color = "yellow")
# 
# # b. 若想於並排的長條圖上繪製文字 #geom_bar(position = "dodge")
# g1 <- ggplot(tcs2019, 
#              aes(agegroup, fill=i12.1))+geom_bar(position = "dodge")
# g1+geom_text(stat="count",aes(label=..count..),
#              position = position_dodge(width = 1),
#              size = 3, color = "blue")
# g1 <- ggplot(tcs2019, 
#              aes(agegroup, fill=i12.1))+geom_bar(position = "dodge")
# g1+geom_text(stat="count",aes(label=..count..),
#              position = position_dodge(width = 1),
#              size = 3, color = "blue")
# # c. 若想於標準化的長條圖上繪製文字,建議重建專用的資料集
# # 參考https://ithelp.ithome.com.tw/articles/10209002
# # install.packages("plyr")
# library(plyr)
# ess2 = ddply(tcs2019,.(agegroup),function(.){
#   res = prop.table(table(factor(.$i12.1)))
#   res2 = table(factor(.$i12.1))
#   data.frame(lab=names(res), y=c(res),yy =c(res2))
# })
# detach("package:plyr", unload=TRUE)
# # 繪製基本圖 #其他需求可自行調整
# ggplot(ess2,aes(x = agegroup,y=y,fill = lab))+
#   geom_bar(stat = "identity")+
#   geom_text(mapping = aes(label = sprintf("%.2f%%",y*100)),
#             size = 2, colour = 'black', vjust = 2, hjust = .5, position = position_stack())
# 
# # (7) 依照變數分類,各組繪製一張直方圖(但僅能應用於基本的長條圖類型)
# g1 <- ggplot(tcs2019, 
#              aes(x=i12.1, fill=agegroup))+geom_bar() #+geom_bar()預設為+geom_bar(position="stack")
# g1+facet_grid(.~agegroup)
# # 變數可互換位置,檢視自己想要強調哪個變項
# g1 <- ggplot(tcs2019, 
#              aes(x=agegroup, fill=i12.1))+
#   geom_bar()
# g1+facet_grid(.~i12.1)
# 
# # (調整顏色(若原本已有設定顏色,此功能將會取代原本的顏色設定)
# # 可運用色票網站https://color.adobe.com/zh/explore
# g1 <- ggplot(tcs2019, 
#              aes(x=agegroup, fill=i12.1))+geom_bar() #+geom_bar()預設為+geom_bar(position="stack")
# g1+scale_fill_manual(values=c("#F7908B", "#72B7F7", "#3E76AB"))
# # 可運用內建顏色
# colors()
# g1 <- ggplot(tcs2019, 
#              aes(x=agegroup, fill=i12.1))+geom_bar() #+geom_bar()預設為+geom_bar(position="stack")
# g1+scale_fill_manual(values=c("lightskyblue1", "rosybrown2", "steelblue1"))


## 請依據上述參數,自行繪製「台灣民眾各年齡層遇到假新聞的經驗比較」一圖
## 基本要求:
# 1. 要有主標題、x,y軸名稱及刻度名稱
# 2. 要有圖例說明
# 3. 圖上須注記作者姓名及資料來源
# install.packages("sjlabelled")
library(sjlabelled)
## Warning: package 'sjlabelled' was built under R version 4.0.5
tcs2019 <- read_spss("tcs2019.sav")
tcs2019$agegroup <- cut(tcs2019$ra2, breaks = c(17,35,49,64,Inf),
                        labels = c("18至35歲", "36至49歲","50至64","65歲以上"))
tcs2019$i12.1 <- as.factor(tcs2019$i12.1)
# install.packages("ggplot2")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.0.5
# 1. 堆疊的長條圖
FakeNews1 <- ggplot(tcs2019,
               aes(x=agegroup, fill=i12.1))+
  geom_bar()+
  labs(title = "台灣民眾各年齡層遇到假新聞的經驗比較",
       x="各年齡層",y="次數",
       subtitle="65+熟齡族與其他年齡有差異?",
       caption="世宏製  資料來源:台灣傳播調查資料庫")+
  theme(axis.title.y = element_text(vjust = 0.5, hjust = 0.5,
                                    angle = 0), 
        plot.title = element_text(vjust = 2, hjust = 0.5))+
  geom_text(stat="count",aes(label=..count..),
             position = position_dodge(width = 0),
             size = 3, color = "white")+
  scale_fill_manual(name="接觸經驗",values=c("1"="blue1","2"="darkblue","3"="black"),
                    labels=c("有遇到過假新聞", "從未遇過假新聞", "不知道是否遇過假新聞"))
FakeNews1

# 2. 標準化的長條圖
FakeNews2 <- ggplot(tcs2019,
               aes(agegroup, fill=i12.1))+
  geom_bar(position = "fill")+
  labs(title = "台灣民眾各年齡層遇到假新聞的經驗比較",
       x="各年齡層",y="比例",
       subtitle="65+熟齡族與其他年齡有差異?",
       caption="世宏製  資料來源:台灣傳播調查資料庫")+
  theme(axis.title.y = element_text(vjust = 0.5, hjust = 0.5,
                                    angle = 0),
        plot.title = element_text(vjust = 2, hjust = 0.5))+
  scale_y_continuous(breaks = c(0,0.25,0.5,0.75,1) ,
                     labels =c("0%","25%","50%","75%","100%"))+
  scale_fill_manual(name="接觸經驗",values=c("1", "2", "3"),
                    labels=c("有遇到過假新聞", "從未遇過假新聞", "不知道是否遇過假新聞"))
FakeNews2

# 3. 並排的長條圖
FakeNews3 <- ggplot(tcs2019,
                    aes(agegroup, fill=i12.1))+
  geom_bar(position="dodge")+
  labs(title = "台灣民眾各年齡層遇到假新聞的經驗比較",
       x="各年齡層",y="次數",
       subtitle="65+熟齡族與其他年齡有差異?",
       caption="世宏製  資料來源:台灣傳播調查資料庫")+
  theme(axis.title.y = element_text(vjust = 0.5, hjust = 0.5,
                                    angle = 0),
        plot.title = element_text(vjust = 2, hjust = 0.5))+
  scale_fill_manual(name="接觸經驗",values=c("1"="pink","2"="yellow","3"="tan"),
                    labels=c("有遇到過假新聞", "從未遇過假新聞", "不知道是否遇過假新聞"))+
  geom_text(stat="count",aes(label=..count..),
            position = position_dodge(width = 1),
            size = 4, color = "red")
FakeNews3

# 4. 不同年齡層各繪製一張直方圖?
FakeNews4 <- ggplot(tcs2019,
                    aes(x=i12.1, fill=agegroup))+
  geom_bar()+facet_grid(.~agegroup)+
  labs(title = "台灣民眾各年齡層遇到假新聞的經驗比較",
       x="是否遇到假新聞",y="次數",fill="各年齡層",
       subtitle="65+熟齡族與其他年齡有差異?",
       caption="世宏製  資料來源:台灣傳播調查資料庫")+
  theme(axis.title.y = element_text(vjust = 0.5, hjust = 0.5,
                                    angle = 0), 
        plot.title = element_text(vjust = 2, hjust = 0.5))+
  geom_text(stat="count",aes(label=..count..),
            position = position_dodge(width = 0),
            size = 3, color = "black")+
  scale_x_discrete("是否遇見假新聞",labels = c("1"="有","2"="沒有","3"="不知道"))
FakeNews4