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

這裡介紹如何使用 R 的 ggmap 套件來繪製地圖,並且把自己的資料依照經緯度畫在地圖上。

ggmap 套件是一個專門用來繪製地圖的 R 套件,它可以自動從 Google 地圖、OpenStreetMap、Stamen Maps 或 CloudMade Maps 網站上下載指定位置的地圖,讓使用者使用 ggplot 的語法來結合地圖與資料並進行繪製。

除了基本的資料點標示之外,使用者還可以透過 ggmap 的所提供的函數來使用 Google 地圖 API 的各種功能,非常方便。

繪製基本地圖

ggmap 套件中的 get_map 函數可以讓我們在 R 的環境中直接下載地圖,接著再呼叫 ggmap 函數就可以畫出來。若要繪製台灣的地圖,可以執行:

library(ggmap)
library(mapproj)
map <- get_map(location = 'Taiwan', zoom = 7)
ggmap(map)

地圖的位置是透過 location 參數來指定,直接輸入地名即可,而 zoom 則是控制地圖的大小。這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-1

get_map 有相當多的參數可以使用,language 可以設定地圖上文字標示的語言:

map <- get_map(location = 'Taiwan', zoom = 7,
  language = "zh-TW")
ggmap(map)

這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-2

location 參數也可以接受經緯度,需要畫出比較精確的位置時,可以這樣使用:

map <- get_map(location = c(lon = 120.233937, lat = 22.993013),
  zoom = 10, language = "zh-TW")
ggmap(map)

這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-3

maptype 參數可以指定地圖的類型(預設是 terrain):

map <- get_map(location = c(lon = 120.233937, lat = 22.993013),
  zoom = 10, language = "zh-TW", maptype = "roadmap")
ggmap(map)

以下是幾種常見的地圖類型:

r-ggmap-package-spatial-data-visualization-4

roadmap 地圖

r-ggmap-package-spatial-data-visualization-5

satellite 地圖

r-ggmap-package-spatial-data-visualization-6

hybrid 地圖

這種黑白的地圖在顯示資料時很好用。

r-ggmap-package-spatial-data-visualization-7

toner-lite 地圖

ggmapdarken 這個參數可以讓地圖變暗(或是變亮):

map <- get_map(location = c(lon = 120.233937, lat = 22.993013),
  zoom = 10, language = "zh-TW")
ggmap(map, darken = 0.5)

這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-8

若要讓地圖變亮,可以執行:

map <- get_map(location = c(lon = 120.233937, lat = 22.993013),
  zoom = 10, language = "zh-TW")
ggmap(map, darken = c(0.5, "white"))

這是畫出來的圖:

r-ggmap-package-spatial-data-visualization-9

darken 基本上就是在地圖上多加一層圖層,透過指定透明度與顏色,就可以做出很多變化。

R

4 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. 于嫙

    很實用,謝謝分享!

Leave a Reply