期末報告 台灣各縣市確診人數

台灣近3年來飽受疫情所苦,所以我的期末主題想製作與疫情相關的專題,透過ggplot繪製長條圖,以及透過邊界地圖,了解台灣各地區的確診情況

yujen
2022-05-16

確診人數長條圖

套件

設定、匯入資料

df = read_excel("C:/Users/yujen/Desktop/AScovid19.xlsx",col_names=F)
colnames(df) = c("縣市", "人數","經度","緯度")

ggplot繪圖

ggplot(df, aes(x=reorder(縣市,人數), y=人數/10000, fill=人數)) + 
geom_bar(stat = "identity") +
labs(title="台灣確診人數", x="縣市", y="人數", subtitle="單位:(萬)",caption="資料來源:衛福部")+  
coord_flip() + 
theme(plot.title=element_text
     (face="bold", size = 14),
      axis.title=element_text(
      size=12), plot.subtitle = element_text(size = 10))

確診人數地理分布

匯入、整理資料

path = "C:/Users/yujen/Desktop/leaflet-rgdal-台灣縣市人口數量 (台灣邊界地圖)/"
shp_file = paste0(path, "mapdata202003270418/TOWN_MOI_1090324.shp")
Taiwan_shp = rgdal::readOGR(shp_file)
Taiwan_shp = rgdal::readOGR(shp_file, layer="TOWN_MOI_1090324")

查看資料內容並轉檔

names(Taiwan_shp)
Taiwan_shp$COUNTYNAME
Taiwan_shp$COUNTY = iconv(Taiwan_shp$COUNTYNAME, from="UTF-8")
print(Taiwan_shp$COUNTY)
data = data.frame(name=Taiwan_shp$COUNTY)
mydata = data.frame(name=Taiwan_shp$COUNTY)

建立迴圈

df$popup = paste0(df$縣市,": ",df$人數,"")
mydata$num = NA
mydata$popup = NA
for(i in 1:nrow(mydata)){
  mydata$num[i] = df$人數[which(df$縣市 == mydata$name[i])]/10000
  mydata$popup[i] = paste0(mydata$name[i], "<br>", mydata$name[i], " 萬人")}

設定顏色

palette = colorRampPalette(colors=c("white","gray75","gray50","gray25","gray1"), space="Lab")(30)
pal = leaflet::colorNumeric(palette=palette, domain=mydata$num)

透過leaflet繪圖

map = leaflet(Taiwan_shp) %>%
  setView(120.9738819, 23.97565, 6) %>%
  addTiles(group = "Normal") %>%
  addProviderTiles(providers$OpenWeatherMap.Clouds,
                   group = "blank map") %>%
  addPolygons(stroke=FALSE,
              opacity=0.5,
              fillOpacity=1, 
              smoothFactor=0.5, 
              fillColor=~pal(mydata$num),
              color="black",
              weight=1,
              popup=mydata$popup,
              highlightOptions=highlightOptions(color="white", 
                                                weight=1, 
                                                bringToFront=TRUE),
                                                group="open") %>%
  addLegend(pal=pal, 
            values=mydata$num,
            title="確診人數(萬)") %>%
  addMiniMap(width = 100,
             height = 100,
             collapsedWidth = 19,
             collapsedHeight = 19,
             toggleDisplay = TRUE,
             position = "bottomleft") %>%
  addMarkers(data=df,
             lng=~經度, 
             lat=~緯度,
             popup=~popup,
             group="popup") %>%
  addLayersControl(
    baseGroups = c("Normal", "blank map"),
    overlayGroups = c("open","popup"),
    options = layersControlOptions(collapsed = FALSE))%>%
  addEasyButton(easyButton(
    icon="fa-crosshairs", title="Locate Me",
    onClick=JS("function(btn, map){ map.locate({setView: true}); }")))
map