R 的 ggmap 套件:繪製地圖與資料分佈圖,空間資料視覺化

將資料畫在地圖上

有了地圖之後,接著就是要將自己的資料畫在地圖上,我們以台灣的紫外線監測資料為例,示範如何將具有經緯度的資料畫在地圖上。

首先從政府資料開放平臺上下載紫外線即時監測資料的 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)來指定圓圈的大小。這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-10

依照資料發佈單位(PublishAgency)分開畫圖:

ggmap(map) +
  geom_point(aes(x = lon, y = lat, size = UVI), data = uv) +
  facet_grid( ~ PublishAgency)

這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-11

把地圖的顏色調淡一點,讓資料點更清楚:

ggmap(map, darken = c(0.5, "white")) +
  geom_point(aes(x = lon, y = lat, size = UVI), data = uv)

這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-12

R

5 Comments

  1. YU

    您好!
    非常感谢您的教学
    我想请问您 通过ggmap这个package我们如何在地图上标注不同的点?
    我简单介绍一下问题:
    我们需要在地图上标注出4所商场的顾客的地理位置 我们现在拥有一个CSV文件 里面标注了顾客们的地理位置 请问如何把这些地理位置(以点的形式)投影在地图上呢 (不同颜色代表不同商场的顾客)?
    谢谢!!!!!

  2. YU

    您好!
    我刚刚尝试了一下 做出了点
    map=get_map(location=c(lon=-1.0000000,lat=47.000000),zoom=7,maptype=”roadmap”)
    ggmap(map)
    ggmap(map) + geom_point(aes(x=-0.76464,y=48.06789))

    我大概猜测只需要把geom_point 里的 x值 和y值变成两个columns就可以标出所有的点?
    请问有没有办法可以把这些点做成4个classes?每个classes的颜色不同?
    谢谢!

  3. HsuanU

    謝謝你的整理!
    幫助很大

  4. 于嫙

    很實用,謝謝分享!

  5. ethan

    很棒!!佩服

Leave a Reply