1.台灣確診人數長條圖及邊界地圖(5/16) 2.台灣加權指數與台積電之plotly雙y軸及蠟燭圖觀察(1/1~5/19)
台灣近3年來飽受疫情所苦,所以期末主題想製作與疫情相關的題目,透過ggplot繪製長條圖,以及透過邊界地圖,了解台灣各地區的確診情況。
透過plotly雙y軸圖及蠟燭圖等方式,了解台股加權指數與台積電的關係。
library(readxl)
library(ggplot2)
library(leaflet)
library(maptools)
library(rgdal)df = read_excel("C:/Users/yujen/Desktop/AS/AScovid19.xlsx",col_names=F)
#匯入資料
colnames(df) = c("縣市", "人數","經度","緯度")
#設定變數名稱ggplot(df, aes(x=reorder(縣市,人數), y=人數/10000, fill=人數)) +
#把xy軸翻轉並設定參數
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/AS/leaflet-rgdal-台灣縣市人口數量 (台灣邊界地圖)/"
shp_file = paste0(path, "mapdata202003270418/TOWN_MOI_1090324.shp")
#設定路徑
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)
#檢查是否還是亂碼
mydata = data.frame(name=Taiwan_shp$COUNTY)
#設定data framedf$popup = paste0(df$縣市,": ",df$人數,"")
#設定後面需要popup的部分
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 = "map1") %>%
#基礎地圖
addProviderTiles(providers$Esri.NatGeoWorldMap,
group = "map2") %>%
addProviderTiles(providers$CartoDB.Positron,
group = "map3") %>%
#新增其他種地圖
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="確診人數(萬)") %>%
#設定Legends
addMiniMap(width = 100,
height = 100,
collapsedWidth = 19,
collapsedHeight = 19,
toggleDisplay = TRUE,
position = "bottomleft") %>%
#設定左下角的小地圖 範圍及顯示大小
addMarkers(data=df,
lng=~經度,
lat=~緯度,
popup=~popup,
group="popup") %>%
#增加popup顯示各地區確診人數
addLayersControl(
baseGroups = c("map1", "map2" , "map3"),
overlayGroups = c("open","popup"),
options = layersControlOptions(collapsed = FALSE))
#設定group 可以做成勾選的效果 顯示我要的部分
map