台灣近3年來飽受疫情所苦,所以我的期末主題想製作與疫情相關的專題,透過ggplot繪製長條圖,以及透過邊界地圖,了解台灣各地區的確診情況
df = read_excel("C:/Users/yujen/Desktop/AScovid19.xlsx",col_names=F)
colnames(df) = c("縣市", "人數","經度","緯度")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)
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