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

9 留言

  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

    很棒!!佩服

  6. Nice weblog right here! Also your site rather
    a lot up very fast! What web host are you the
    use of? Can I am getting your affiliate hyperlink in your
    host? I want my website loaded up as fast as yours lol

  7. each time i used to read smaller articles that also clear their motive, and that is also happening with this piece of writing which
    I am reading now.

  8. Do you have a spam issue on this website; I also am a blogger, and I was wondering your situation; we have created some nice procedures and we
    are looking to exchange methods with others, be sure to
    shoot me an email if interested.

  9. Aw, this was an exceptionally good post. Spending some time and actual effort to generate
    a great article… but what can I say… I hesitate a lot
    and never manage to get nearly anything done.

Leave a Reply