iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
0
自我挑戰組

新手 R 語言學習紀錄系列 第 26

Day 26- R語言 ggplot2資料視覺化 Part 3(1)- ggplot2 + 地圖

  • 分享至 

  • xImage
  •  

Day 26- ggplot資料視覺化 Part 3(1)- ggplot2 + 地圖
(前言:內個,我只是個剛接觸程式設計的小萌新,如果內文內容、程式碼、統計資料圖寫或畫的不對,還請各位大大指教 Orz)

今天我們來學習ggplot2的地圖繪製功能。今天我們用R來畫一張世界地圖及其他區域地圖,熟悉一下地圖繪圖的基本操作。

首先我們先安裝maps套件,這份套件有每個國家的經緯度邊界資料(大約10萬筆),如果要呼叫地圖資料的話,使用map_data(“world”)即可,這邊我們將這筆資料儲存到一個變數上,名稱為wmap
這邊列出wmap的前10筆資料
https://ithelp.ithome.com.tw/upload/images/20191012/20120887tOm277qp7u.png

可以看到,這份資料有列出經度(long)、緯度(lat)、國家的代號(group)、邊界經緯度代號(order)、區域/國家名稱(region),及分區(subregion)

如果要列出這份地圖涵蓋的國家名稱,可以使用sort(unique(wmap$region))來完成。

接下來我們先畫一張世界地圖。程式碼如下:

map <- map_data("world", region = unique(wmap$region))
wmap1 <- ggplot(map, aes(x = long, y = lat, group = group)) + geom_polygon(colour = "white")
wmap1

圖片:
https://ithelp.ithome.com.tw/upload/images/20191012/201208875RgpkiKbjH.png
可以看到這份程式碼首先先呼叫世界地圖的資料,指定區域為wmap 中的每個國家名稱並儲存至map變數,接下來使用ggplot函數畫圖,資料為map資料,美學屬性指定x軸為經度,y軸為緯度,group則按照wmap 資料中的國家代號繪圖(如果這個沒有指定的話,畫出來的圖會像嘔吐物喔),接下來指定geom 屬性,試過幾次後,我發現ploygon 畫出來的圖效果最好(如果是geom_point 的話,有些國家會看不到,因為點的大小太大。geom_line 畫出來的圖雖然其實也是可以,但是地圖裡會有很奇怪的線條,可能影響整體效果)


接下來來練習畫區域圖,假設今天只要畫日本、柬埔寨、韓國(南韓、北韓)、印尼、蒙古台灣、中國、馬來西亞、泰國、越南、寮國、及印尼的地圖的話,只要把第一行的map_data中的region引數改成國家名稱(記得在改之前先檢查一下國家名稱列表)即可,程式碼如下:

map <- map_data("world", region = c("Japan","Laos","Cambodia", "Vietnam", "Malaysia", "Thailand", "Taiwan", "China","South Korea","North Korea","Singapore","Indonesia", "Mongolia"))
wmap1 <- ggplot(map, aes(x = long, y = lat, group = group)) + geom_polygon(colour = "white")
wmap1 

圖片:
https://ithelp.ithome.com.tw/upload/images/20191012/20120887af0PbHXRTs.png
這樣就好啦ˊˇˋ
如果要加點顏色的話,就只要在geom_polygon裡面加上fill = 顏色就好了

明天我們繼續畫地圖吧

參考資料:

  1. https://yijutseng.github.io/DataScienceRBook/vis.html
  2. https://blog.gtwang.org/r/r-ggmap-package-spatial-data-visualization/
  3. https://www.itread01.com/content/1549971372.html

上一篇
Day 25- R語言 ggplot2資料視覺化 Part 2- ggplot函數
下一篇
Day 27- R語言 ggplot2資料視覺化 Part 3(2)- choroplethr 地圖面量圖
系列文
新手 R 語言學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言