工具 如何用R繪製地圖?大廚手把手教你畫圖!

2021-02-07 數據火鍋

上一回咱們說到,R語言不僅有極其強大的統計計算功能,而且在信息可視化處理、繪圖上是一把好手1,那我們今天就具體談談如何用R語言繪製地圖。

今天大廚主要做以下三件事:調取基礎地圖數據並繪製、讀取網頁數據製圖、繪製遷徙圖。

俗話說:「磨刀不誤砍柴工」,為了更好的操作體驗,你需要安裝如下拓展包。

#install.packages("maps")
library(maps)

#install.packages("mapdata")
library(mapdata)

#install.packages("maptools")
library(maptools)

#install.packages("devtools")
library(devtools)

#library(devtools)
install_github('badbye/baidumap')

#library(devtools)
install_github('lchiffon/REmap')

#library(REmap)

上述R軟體拓展包中存儲著常見地圖的數據,如maps包中存有世界地圖、美國地圖、美國各州地圖等,加載了這個包,就可以用幾行簡單的代碼繪製出上述地圖。

其中mapdata包比較久遠,雖有中國地圖的數據,但是比較舊,未得到及時更新。

從上述拓展包裡獲取基礎地圖數據,我們可能面臨再用顏色填充或者其他操作繪製的需要。

library(maps)
map("world", fill = TRUE, col = rainbow(200),
ylim = c(-60, 90), mar = c(0, 0, 0, 0))
title("世界地圖")


library(maps)
map("world", fill = TRUE, col = rainbow(209),
mar= c(0, 0, 2, 0)
title("美國地圖")


library(maps)
map('state',region = c('new york', 'new jersey', 'penn'),
fill= TRUE, col = rainbow(3), mar = c(2, 3, 4, 3))
title("美國三州地圖")


library(mapdata)
map("china",col = "red4", ylim = c(18, 54), panel.first = grid())
title("中國地圖")

library(maptools)
china<-readShapePoly('bou2_4p.shp')
plot(china)


補充:##mapdata裡的中國數據比較陳舊,比如其上重慶還未從四川分出來


我們以基礎地圖中的中國地圖為例,我們想要:

1.給四個直轄市進行著色

getColor=function(mapdata,provname,provcol,othercol)
{f=function(x,y)ifelse(x %in% y,which(y==x),0);
colIndex=sapply(mapdata@data$NAME,f,provname);
fg=c(othercol,provcol)[colIndex+1];
return(fg);}
provname=c("北京市","天津市","上海市","重慶市")
provcol=c("red","green","yellow","purple")
plot(china,col=getColor(china,provname,provcol,"white"))


補充:##mapdata是存放地圖數據的變量
##provname是需要改變顏色的地區的名稱
##provcol是對應於provname的代表顏色的向量,名稱和數字均可

2.通過顏色深淺顯示人口多

provname=c("北京市","天津市","河北省","山西省","內蒙古自治區","遼寧省","吉林省","黑龍江省","上海市","江蘇省","浙江省","安徽省","福建省","江西省","山東省","河南省","湖北省","湖南省","廣東省","廣西壯族自治區","海南省","重慶市","四川省","貴州省","雲南省","西藏自治區","陝西省","甘肅省","青海省","寧夏回族自治區","新疆維吾爾自治區","臺灣省","香港特別行政區")
pop=c(1633,1115,6943,3393,2405,4298,2730,3824,1858,7625,
5060,6118,3581,4368,9367,9360,5699,6355,9449,
4768,845,2816,8127,3762,4514,284,3748,2617,
552,610,2095,2296,693)
provcol=rgb(red=1-pop/max(pop)/2,green=1-pop/max(pop)/2,blue=0)plot(china,col=getColor(china,provname,provcol,"white"),xlab="",ylab="")




‍ 獲取數據

數‍據來‍源:鳳凰新聞H5作品 《你居住的城市有多少家莆田系醫院?》


raw= readLines("http://news.ifeng.com/mainland/special/ptxyy/",encoding= "UTF-8")
rawHospital= raw[123 : 238]

extFun= function(x){
split= strsplit(x, "','")
out= strsplit(split[[1]][2], "<br/>")
return(out)
}
extFun(rawHospital[1])
hosList= sapply(rawHospital,extFun)
hospital= c()
for(iin 1:length(hosList)) hospital = append(hospital, hosList[[i]])

library(baidumap)
blackHospital= getCoordinate(hospital, formatted = T)
blackHospital= na.omit(blackHospital)
plotdata= data.frame(lon = blackHospital[,1],
lat= blackHospital[,2],
city= rownames(blackHospital))


第一步:獲取一個城市向量的經緯度
library(REmap)
city_vec = c('上海','廣州','大連','武漢','廈門','拉薩','長春','包頭','重慶','常州')
get_city_coord("上海")
get_geo_position (city_vec)

第二步:繪製連線圖
set.seed(125) 
origin= rep("北京",10)
destination= city_vec
dat= data.frame(origin,destination)
out= remap(dat,title = "REmap實例數據",subtitle = "theme:Dark")
plot(out)


補充:##theme為主題,可選Dark、Sky、blue和none四種;
在Windows上操作時,需要將上述命令中的漢字轉換為拼音才可識別操作,比如「上海」需要輸入為"shanghai"

素材 | 顧志娟/陳燕霞/姚倩

參考:1.R語言繪製中國地圖,發於「加百力」公號,2015/05/05



點擊「閱讀原文」進入下載連結

密碼: fe19

相關焦點

  • 手把手教你如何繪製客戶旅程地圖,教科書級操作手冊
    前面我們說每家公司都要有自己的 「客戶旅程地圖」(Customer Journey Mapping,簡稱CJM),並講了什麼是CJM、CJM的作用,今天就手把手教你如何繪製「客戶旅程地圖」,踏出客戶體驗創新最堅實的一步。
  • 【R】如何用 R 繪製地圖
    本文主要包含三種繪製地圖的方法:繪製基礎地圖、基於空間數據格式(shapefile)繪製地圖以及如何調用百度地圖和谷歌地圖的數據來繪製地圖
  • 三種可視化方法,手把手教你用R繪製地圖網絡圖!
    大數據文摘出品編譯:睡不著的iris、陳同學、YYY不知道如何在地圖上可視化網絡圖
  • 手把手教你用PS繪製惟義樓地圖
    繪製一張地形圖很難嗎當然難,你得小心觀察每個教室,每個樓道而且,畫出來也並沒有想像中那麼容易
  • 超強畫圖工具!
    最近經常被大家問到畫圖工具類,有沒有什麼是比較好學的呀
  • 手把手教你用Python畫數據地圖之進階篇
    「朱老師,你上次教的世界地圖太簡單了。你能不能教我畫這個荷蘭疫情圖?」【對方發來一個連結】朱老師看完陷入了沉思:這問題也太直接了點兒吧!
  • 用R在地圖上繪製網絡圖的三種方法
    R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)ComplexHeatmap |理解繪圖邏輯繪製熱圖R語言可視化學習筆記之ggridges包  ggplot2學習筆記之圖形排列地理網絡圖與傳統的網絡圖不同,當引用地理位置進行節點網絡可視化時,
  • Graphpad 繪圖教程 | 手把手教你繪製折線圖
    今天給大家講解 Graphpad 繪製折線圖,話不多說,直接進入教程。1. 打開 graphpad 軟體,點擊 XY 模塊,按下圖進行選擇。3. 點擊 graphs 下的 new analysis,按下圖選擇,生成草圖。4.
  • 手把手教你使用ggplot2繪製中國地圖
    今天就教大家如何使用ggplot2實現地圖的繪製,以及如何在地圖中加入氣泡圖和條形圖。本文所使用的數據來自於經管之家moonstone作者提供的流行病學樣本數據。有關地理信息數據可至文後的下載連結。下面就使用這些數據實現地圖的繪製。#使用多邊形繪圖函數geom_polygon()繪製空的地圖ggplot(data = latitude_longitude, mapping = aes(x = long, y = lat,  group = id)) + geom_polygon(colour = 'black', fill = 'white')
  • 手把手教你用plotly繪製excel中常見的16種圖表(下)
    上一期咱們介紹《手把手教你用plotly繪製excel中常見的16種圖表(上)》演示了8種常見圖表,今天我們繼續演示另外8種常見圖表的繪製。本次內容,同樣回復0306即可獲取全部演示代碼和數據文件。旭日圖在顯示一個環如何被劃分為作用片段時最有效,而另一種類型的分層圖表樹狀圖適合比較相對大小。
  • 手把手教你用SAS做疫情地圖
    而空間分布則通常用更為直觀的統計地圖來進行展示。繪製統計地圖可以使用ArcGIS等專業軟體。常用統計軟體也具有繪製統計地圖的功能。這裡我以SAS為例,分享製作武漢市疫情地圖的方法。首先,在網上下載區縣級地圖shape文件,長這樣。然後新建我們需要的武漢市地圖數據。
  • 【Python小技巧】手把手教你用Python繪製K線圖
    大家好,本期教大家如何用Python來繪製K線圖。相信每一個炒股的同學都很了解K線圖吧。
  • 手把手教你繪製一個寫實USB圖標
    首先,我們來繪製背景。設置前景色為#c0c0c0,背景色為#a7a7a7,使用漸變工具,做一個從左上到右下的線性漸變。
  • 實用技術 | 如何用R繪製並填充相對正確的中國地圖
    標準地圖象徵著國家主權和領土完整。作為非地理信息專業但又要在研究過程中涉及地圖繪製的政治學專業學生,我們必須在繪製中國地圖並用作公開學術發表/出版時格外注意。誠然與需要付費才能使用的地理信息軟體ArcGIS相比,免費、開源的R軟體結合相對強大的tidyverse和sf等包在處理一些地理信息數據的可視化時可以不落下風,但是由於現有可供R軟體讀取的很多地圖json/shp文件都由外國作者創作,因此在涉及中國邊界的繪製過程中經常會有意無意的出現錯繪、漏繪的情況。我們曾經在《實用技術 | 如何用R繪製並填充相對正確的世界地圖》一文裡提過上述問題。
  • 我用Python之basemap畫圖27問
    本文總結了用Python的basemap模塊畫圖的一些知識點。2 簡介 在數據可視化過程中,我們需要將數據在地圖上畫出來。比如說我們在地圖上畫出城市人口,飛機航線,軍事基地,礦藏分布等等。這樣的地理繪圖有助於讀者理解空間相關的信息。basemap 是Python的一個強大的負責實現地理信息可視化的庫,是Matplotlib的一個附加工具包,通過結合 matplotlib 可以繪製出很多漂亮的地圖。
  • 手把手教你繪製雲南大象北遷路線圖(附路線文件)
    ,在國外,這群大象的遷移也引起了廣泛的關注,這裡,我們通過新聞報導的信息,使用GIS的方式,教大家如何繪製大象北遷的路線圖。數據來源本教程所使用的數據是從水經微圖中下載的衛星圖,除了衛星圖,常見的GIS數據都可以從水經微圖中下載,你可以通過關注微信公眾號「水經注GIS」,然後在後臺回復「微圖」即可獲取軟體下載地址,當然也可以直接在水經注GIS官方網站下載。
  • 手把手教你用R做傾向性匹配
    上一期帖子我們講了propensity score matching(PS)的注意事項,有朋友說最好能講講怎麼做PS,其實關於怎麼做PS已經有不少公眾號,博主都做過比較詳盡的介紹,今天袁老師就以「A Step-by-Step Guide to Propensity Score Matchingin R」這篇文獻為藍本,手把手教大家怎麼用
  • 如何用Origin繪製「地圖」插圖?
    但繪製地圖插圖絕不是件容易的事,從上面例子中風格各異的插圖可以看出,大家所用的方法「很雜」。 我能想到的方法有:截取地圖後用PS或AI做標記(數據較少時),也可用各種R包繪製,甚至動用地理信息專業的軟體ArcGIS等,當然也有人用矢量軟體如 Ai 的鋼筆工具臨摹出可分區著色的矢量圖… 今天,給大家介紹個簡單的方法,用Origin繪製以地圖為背景的氣泡圖(類似上面第二個例子)。
  • 地圖可視化繪製 | R-cartography 藝術地圖繪製
    本期推文我們介紹一個可以繪製頗具「藝術」風格地圖的可視化包-cartography,主要涉及的內容如下:R-cartography 簡介說到cartography包,用Python繪圖的小夥伴可能會想到cartopy(Basemap的下一代地圖可視化繪製包),下面就簡單介紹下
  • 用電腦自帶畫圖工具繪製場景大作?這操作,把我看呆了!
    大家都見過windows自帶的畫圖工具吧.有沒有用它畫過畫呢?