有了地圖之後,接著就是要將自己的資料畫在地圖上,我們以台灣的紫外線監測資料為例,示範如何將具有經緯度的資料畫在地圖上。
首先從政府資料開放平臺上下載紫外線即時監測資料的 csv 檔,接著將資料讀進 R 中。(這裡我用的資料是 2015/11/16 15:22:15 的資料)
uv <- read.csv("UV_20151116152215.csv")
這裡原始的經緯度資料是以度分秒表示,在使用前要轉換為度數表示。
lon.deg <- sapply((strsplit(as.character(uv$WGS84Lon), ",")), as.numeric) uv$lon <- lon.deg[1, ] + lon.deg[2, ]/60 + lon.deg[3, ]/3600 lat.deg <- sapply((strsplit(as.character(uv$WGS84Lat), ",")), as.numeric) uv$lat <- lat.deg[1, ] + lat.deg[2, ]/60 + lat.deg[3, ]/3600
接著使用 ggplot
的語法,把資料加入地圖中:
library(ggmap) map <- get_map(location = 'Taiwan', zoom = 7) ggmap(map) + geom_point(aes(x = lon, y = lat, size = UVI), data = uv)
ggmap
負責畫出基本的地圖,然後再使用 geom_point
加上資料點,除了指定經緯度之外,我們還使用紫外線的強度(UVI
)來指定圓圈的大小。這是畫出來的圖:
依照資料發佈單位(PublishAgency
)分開畫圖:
ggmap(map) + geom_point(aes(x = lon, y = lat, size = UVI), data = uv) + facet_grid( ~ PublishAgency)
這是畫出來的圖:
把地圖的顏色調淡一點,讓資料點更清楚:
ggmap(map, darken = c(0.5, "white")) + geom_point(aes(x = lon, y = lat, size = UVI), data = uv)
這是畫出來的圖: