數據分享|使用 Stata 繪製中國省級行政區劃地圖(帶九段線和比例尺)

2021-02-23 RStata

整理不易,感謝大家幫忙分享,關注本公眾號(RStata)然後在公眾號後臺發送 1228 即可獲知免費下載的方式。該數據為限時免費分享,截止時間為 2020 年 12 月 28 日晚 8 點,過期不再免費分享,可以從 RStata 平臺上獲取:https://rstata.duanshu.com/ (掃描開頭二維碼或點擊文末的閱讀原文即可跳轉)

大家是不是都覺得 Stata 畫地圖的功能看起來很雞肋?那你可大大的錯了,Stata 畫地圖的功能很強大的!今天給大家分享一份使用 Stata 繪製中國省級區劃(2019年)的地圖數據和使用代碼,聽說大家想要比例尺和指北針?也都有的!填充地圖和描點地圖的繪製代碼都有!

繪製效果如下:

填充地圖描點地圖繪製填充地圖

為了讓大家更好的在實際工作中使用這份數據,我使用的是疫情數據演示這份地圖數據的使用:

cd "~/Desktop/Stata繪製省級地圖2.1/"
clear all

* 繪製地圖
* 讀取疫情數據
use china-covid19, clear

* 最後一天
sum date
global lastday = string(`r(max)', "%tdCY-N-D")
global lastdaynum = `r(max)'
di `"${lastday}"'

* 計算總確診人數、總病死和總治癒人數
sum confirmed if date == ${lastdaynum}, d
local total_confirmed = r(sum)
sum deaths if date == ${lastdaynum}, d
local total_deaths = r(sum)
sum recovered if date == ${lastdaynum}, d
local total_recovered = r(sum)

drop if missing(citycode)
collapse (sum) confirmed (sum) recovered (sum) deaths, by(provcode date)

* 合併地圖數據
ren provcode 省代碼
destring _all, replace
merge m:m 省代碼 using china_prov_db

grmap confirmed if date == ${lastdaynum} | index(省, "_") ///
using china_prov_coord, id(ID) ///
fcolor("254 229 217" "252 187 161" "252 146 114" "251 106 74" "222 45 38" "165 15 21" "black") ///
ocolor("gray" ...) ///
clmethod(custom) clbreaks(0 0.9 9 99 999 9999 99999 999999 1000000) ///
ti("新冠肺炎累計確診病例分布", size(*1.2)) ///
subtitle("截止 ${lastday} ,累計確診:`total_confirmed' 例 病死:`total_deaths' 例 治癒:`total_recovered' 例") ///
graphr(margin(medium)) ///
osize(vvthin ...) ///
legend(size(*1.2) ///
order(2 "無" 3 "1~9 人" 4 "10~99 人" ///
5 "100~999 人" 6 "1000~9999人" 7 ">= 10000 人") ///
ti(累計確診人數, size(*0.5) pos(11))) ///
xsize(20) ysize(12.5) ///
caption("數據來源:canghailan/Wuhan-2019-nCoV @ GitHub| 繪製:微信公眾號 RStata", size(*0.8)) ///
line(data(china_city_line_coord.dta) size(*0.5 ...) color(black) select(keep if _ID <= 6)) ///
label(data(china_prov_label.dta) x(X) y(Y) l(name) size(*0.8)) ///
xsize(13) ysize(10) ///
polygon(data(polygon) by(value) fcolor(black) ///
osize(vvthin))

gr export 新冠疫情確診人數省級分布.png, replace width(2600) height(2000)

新冠疫情確診人數省級分布

如果不想顯示省份標籤,可以在 label(data(china_prov_label.dta) x(X) y(Y) l(name) size(*0.8)) 裡面加上 select(keep if id >= 35)。

上面演示的是連續變量的繪製,如果是離散變量該如何繪製呢?例如我們展示下各市的類型:

use china_prov_db, clear
encode 類型, generate(type)
codebook type

spmap type using china_prov_coord.dta, id(ID) ///
fcolor("141 211 199" "255 255 179" "190 186 218" "251 128 114") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4) ///
ti(Stata 繪製帶九段線小地圖的中國省級地圖, size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年中國省級行政區劃", color(black)) ///
caption("版本 2.1 | 微信公眾號 RStata 出品", size(*0.8)) ///
osize(vvthin ...) ///
legend(size(*1.3) ///
order(2 "特別行政區" 3 "直轄市" 4 "省" 5 "自治區") ///
ti(類型, size(*0.5) pos(11) color(black)) color(black)) ///
line(data(china_city_line_coord.dta) size(*0.5 ...) color(black) select(keep if _ID <= 6)) ///
label(data(china_prov_label.dta) x(X) y(Y) l(name) size(*0.8)) ///
xsize(13) ysize(10) ///
polygon(data(polygon) by(value) fcolor(black) ///
osize(vvthin))

gr export 中國省級行政區劃.png, replace width(2600) height(2000)

中國省級行政區劃繪製描點地圖

由於這份地圖數據是蘭伯特投影的,坐標不是常見的經緯度,所以不能直接將經緯度坐標點描到這個地圖上,需要提前進行坐標轉換,為此,我寫了一個 Shiny 應用幫助不會 R 語言的小夥伴進行坐標轉換:https://czxb.shinyapps.io/crs-trans/

注意事項:上傳的 csv 文件應該包含數值型的 lon 和 lat 變量,觀測值上限大概是 10 萬個,不可多人同時使用。

例如我們使用 2007年工業企業資料庫地理位置數據(前 10000 個觀測值) 做演示:

use 工企示例數據, clear 
* 導出為 csv 格式的數據
export delimited using "工企示例數據.csv", replace

工企示例數據.csv 文件就是包含數值型變量 lon 和 lat 的文件,將這個文件用 https://czxb.shinyapps.io/crs-trans/ 轉碼之後就可以下載得到 轉換後的數據.csv 文件,為了減少網絡傳輸的壓力,這個文件僅包含 x y 兩個變量,下面我們再把坐標和原始的數據合併起來:

import delimited using "轉換後的數據.csv", clear 
gen id = _n
save 坐標, replace

use 工企示例數據, clear
gen id = _n
merge 1:1 id using 坐標
drop lon lat id _m

encode 省自治區直轄市, gen(prov)
save pointdata, replace

然後我們就可以畫圖了:

use china_prov_db, clear
spmap using china_prov_coord.dta, id(ID) ///
ocolor("black" ...) ///
ti("使用 Stata 繪製中國省級描點地圖", color(black)) ///
graphr(margin(medium)) ///
caption("繪製:RStata | 歡迎關注微信公眾號 RStata 學習數據處理和圖表可視化", size(*0.8)) ///
osize(vvthin ...) ///
legend(off) ///
line(data(china_city_line_coord.dta) size(*0.5 ...) color(black) select(keep if _ID <= 6)) ///
label(data(china_prov_label.dta) x(X) y(Y) l(name) size(*0.8)) ///
point(data(pointdata) by(prov) ///
fcolor("80 80 255" "206 61 50" "116 155 88" ///
"240 230 133" "70 105 131" "186 99 56" ///
"93 177 221" "128 34 104" "107 215 107" ///
"213 149 167" "146 72 34" "131 123 141" ///
"199 81 39" "213 143 92" "122 101 165" ///
"228 175 105" "59 27 83" "205 222 183" ///
"97 42 121" "174 31 99" "231 199 111" ///
"90 101 94" "204 153 0" "153 204 0" ///
"169 169 169" "204 153 0" "153 204 0" ///
"51 204 0" "0 204 51" ///
"0 204 153" "0 153 204") ///
x(x) y(y) shape(p ...)) ///
polygon(data(polygon) by(value) fcolor(black) ///
osize(vvthin))

gr export 2007年工企的位置分布.png, replace width(2600) height(2000)

2007年工企的位置分布

另外如果你會一些 R 語言,也可以使用附件中的 R 腳本轉換坐標:

library(tidyverse)
library(sf)

haven::read_dta('工企示例數據.dta') %>% 
  st_as_sf(coords = c("lon", "lat"), crs = 4326) %>% 
  st_transform('+proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs') -> sf

sf %>% 
  st_drop_geometry() %>% 
  bind_cols(sf %>% 
              st_coordinates() %>% 
              as_tibble()) %>% 
  rename(x = X, y = Y) %>% 
  haven::write_dta('蘭伯特等角投影.dta')

然後就可以使用 蘭伯特等角投影.dta 數據繪製類似的圖了,這個就是作業。

直播講解

由於該數據比較複雜,使用難度較大,所以明晚將會有一個直播課講解如何使用這份地圖數據,歡迎各位培訓班的會員(SVIP / VIP)參加。本課程不包含在本次數據分享中,歡迎報名 RStata 培訓班參加:歡迎報名 RStata 培訓班學習數據處理和圖表繪製!

直播信息獲取數據

整理不易,感謝大家幫忙分享,關注本公眾號(RStata)然後在公眾號後臺發送 1228 即可獲知免費下載的方式。該數據為限時免費分享,截止時間為 2020 年 12 月 28 日晚 8 點,過期不再免費分享,可以從 RStata 平臺上獲取:https://rstata.duanshu.com/ (掃描開頭二維碼或點擊文末的閱讀原文即可跳轉)

相關焦點

  • 數據分享|使用 R 語言繪製全球各國(地區)省級行政區劃地圖矢量數據 & 代碼
    另外你也可以從 RStata 平臺獲取:https://rstata.duanshu.com/ (會員專享,掃描開頭二維碼或點擊文末的閱讀原文即可跳轉)之前給大家分享了一份全球各國(地區)的二級行政區劃數據:數據 & 代碼分享|使用 R 語言繪製全球各國市級行政區劃地圖數據 & 代碼,這一次給大家分享一份全球各國(地區)的一級行政區劃數據和
  • 地圖的正確使用指南
    (三)釣魚島及其附屬島嶼 1.比例尺大於1:1億的中國地圖或中國示意地圖,必須表示釣魚島、赤尾嶼;比例尺大於1:1000萬的中國地圖,必須標註出「釣魚島」、「赤尾嶼」名稱。 2.臺灣省地圖必須繪出釣魚島和赤尾嶼(以「臺灣島」命名的地圖除外)。
  • 地圖審查流程及主要內容
    (三)釣魚島及其附屬島嶼1.比例尺大於1:1億的中國地圖或中國示意地圖,必須表示釣魚島、赤尾嶼;比例尺大於1:1000萬的中國地圖,必須標註出「釣魚島」、「赤尾嶼」名稱。2.臺灣省地圖必須繪出釣魚島和赤尾嶼(以「臺灣島」命名的地圖除外)。釣魚島和赤尾嶼既可以包括在臺灣省全圖中,也可以用臺灣本島與釣魚島、赤尾嶼的地理關係作附圖表示。
  • 地圖:地理科技寫作的「痛點」 知多少?
    我國版圖在地圖上的表示正確與否,直接涉及領土主權完整和民族利益。在科技論文寫作中,有關地圖的使用又有哪些「痛點」呢?「島清」:4個群島(東沙、西沙、中沙、南沙)和零星島礁,包括200多個島嶼、沙洲、暗礁、暗沙、暗灘等。「界明」:南海斷續線的分段及位置應嚴格按照規定繪製。(共9段,臺灣島東面一段不屬於南海斷續線)正確地圖如下圖所示:Ø中國全圖(包括中國示意圖)必須表示釣魚島、赤尾嶼等島嶼。小
  • 廣州推出標準地圖服務平臺 讓地圖使用不出「一點」差錯
    此外,還要注意海上界線繪製方式——廣州背山臨海,南沙區直面廣袤的南海,因此南沙區南部界線為開放界線,東部末端向東與深圳東莞界相接,西部末端斷於洪奇門入海口。同時,要特別注意界線與河心島位置關係的正確表示。針對此類問題,市規劃和自然資源局推出廣州市標準地圖服務平臺,覆蓋廣州7434平方千米的系列比例尺標準地圖,包括市級、中心城區、市轄區、街鎮共237幅地圖。
  • 使用 hchinamap / highcharter 繪製交互式中國地圖及中國各省地圖
    雖然在 hchinamap 函數裡有超過 20 個參數,但是依然不能滿足所有人的需要,所以我不再建議大家使用 hchinamap 繪製中國及各個省的地圖了。highcharter 可以完成該包提供的所有的功能的!
  • 使用REmap繪製中國地圖
    上次我們介紹了使用ggplot2繪製中國熱力地圖,需要溫習的同學可以點擊以下連結 使用ggplot2繪製中國地圖  。
  • 《中國分省系列地圖集》首發 省級行政區劃全涵蓋
    新中國成立以來第一套涵蓋我國全部省級行政區劃的分省系列地圖集——《中國分省系列地圖集》,經星球地圖出版社編制出版,6月16日該地圖集在北京首發。出席首發式的新聞出版總署副署長鄔書林指出,作為慶祝中華人民共和國成立60周年百種重點圖書中率先出版的大型出版項目《中國分省系列地圖集》的出版發行,是出版界獻給共和國60華誕的一份厚禮,它填補了我國地圖出版領域的一項空白。    中國版協主席於友先、總參作戰部副部長王家聲、中國出版集團公司總裁聶震寧出席了首發式。
  • 智利長寬比例達到24比1,如何繪製全國地圖?
    而現在的地圖,廣泛應用於科學、文化、教育、交通等實踐活動中的各個領域,種類複雜多樣,已經屬於普通的消費品,所以主要繪製在紙張之上,而且隨著技術的進步,現在的地圖還可以做成電子地圖,極大地方便了人們的使用。
  • 中國地圖豎起來了
    大幅面全開中國豎版地圖問世並發行新華社發    據新華社電記者日前在湖南地圖出版社了解到,其與湖北省測繪學會共同編制的豎版《世界地勢圖》、《世界知識地圖》,湖南地圖出版社獨立繪製的《中國地勢圖》、《中華人民共和國地圖》已得到國家測繪地理信息局的認可,獲得審圖號、書號,並正式出版發行。
  • 2021年版最新分省全套高清地圖分享(行政區劃數據截止今日)
    到了1月底,2021年行政區劃調整又開始了,而且還是接二連三的來,於是乾脆就把2021年的調整也更新了,算是一個新鮮出爐的最新地圖。於是本套地圖的數據截止日期就變成了今日(2021年3月4日)。截至目前,2021年完成的行政區劃調整涉及到陝西、新疆、福建、四川、雲南、廣西、湖南7省區。這7省區地圖稱之為2021年版,其他省市區地圖暫且稱之為2020年版。
  • 氣象編程 | 中國地圖shp文件和Python繪圖實例
    省級行政邊界來自中國科學院資源環境科學數據中心(RESDC)2015年中國省級行政邊界數據,通過ArcGIS轉為WGS84地理坐標系。包含南海諸島,不包含十段線十段線來自GMT中文社區的中國國界、省界、十段線以及南海諸島dat文件,通過Python寫為線圖層shp後,通過ArcGIS選中十段線另存為一個線圖層shp全球國家行政邊界數據來自RESDC全球國家行政邊界數據,通過ArcGIS改為WGS84地理坐標系說明GMT中文社區提供的中國國界、省界、十段線以及南海諸島dat文件中省界之間有交錯
  • 使用Python和R繪製數據地圖的十七個經典案例
    這篇文章中,你將學習如何用Python和R,使用包括實際代碼示例的幾種方法來布局和可視化地理空間數據。我還列出了資源,以便你可以了解每個教程中突出顯示的每個包以及進一步的用戶分析,從而獲得更多的靈感。 前言 為了探索目的而創建一個簡單的地圖不再需要你學習如何操作shapefile或想像投影。並且,無論你喜歡在R或Python,都有快速和簡單的方法把你的數據展現在地圖上。
  • 專家建議 | 如何避免「問題地圖」?
    給出了相關注意事項,並對學術論文中地圖的合理使用,以及地圖類插圖的具體處理辦法給出了建議。《公開地圖內容表示補充規定(試行)》規定繪製中國地圖(含示意性中國地圖)應完整表示中國領土,不得隨意壓蓋中國地圖圖形範圍;使用繪製地圖,應當執行國家有關地圖編制標準,遵守國家有關地圖內容表示的規定。
  • 中國地圖手抄報圖片
    偶爾會有一些情況,比如說受到一些地圖投影變形的影響或者是製作不同方位的鳥瞰圖之類的地圖,這類的中國地圖其正北方向就可能不在圖面的上方了。比例尺按照國家測繪地理信息局的規定,中國全圖的比例尺應在1:100萬及以下。國家測繪地理信息局的官方網站上有免費的標準中國地圖和世界地圖的底圖提供下載。
  • 浙江實現省域1:2000比例尺基礎地理信息數據全覆蓋
    王逸飛 攝中新網杭州8月28日電(王逸飛 汪旭瑩)28日,浙江省自然資源廳舉行新聞通氣會,通報該省1:2000比例尺基礎地理信息數據建設成果。記者獲悉,目前浙江已實現省域範圍10.55萬平方公裡1:2000比例尺基礎地理信息數據全覆蓋,其也成為在全國率先完成該工作的省份。
  • Stata數據可視化: 十幅精美圖形的繪製
    散點圖:附加密度函數圖和擬合線(Scatter Plot with Regression Results)附加密度函數和擬合曲線的散點圖能夠更好地看清樣本的概率分布,同時能夠表示出參數估計的置信區間。三變量比例圖 (triplot)三變量比例圖可以顯示出三個變量之間的複雜的組合關係,三個變量比例的取值範圍為1~100。
  • 中國地圖由橫變豎:南海諸島首次全景展現
    原標題:中國地圖由橫變豎:南海諸島首次全景展現   日前在湖南地圖出版社了解到,其與湖北省測繪學會共同編制的豎版《世界地勢圖》、《世界知識地圖》,湖南地圖出版社獨立繪製的《中國地勢圖》、《中華人民共和國地圖》已得到國家測繪地理信息局的認可,獲得審圖號、書號,並正式出版發行。   據湖南地圖出版社介紹,豎版的《中華人民共和國地圖》是國內首創的大幅面全開豎版地圖。
  • 中國臺灣島和澎湖列島的全景地圖清代《臺灣及澎湖列島全圖》
    《臺灣及澎湖列島全圖》描繪了清代光緒8年(1882 年)以後繪製的臺灣島和澎湖列島全景彩色地圖。《臺灣及澎湖列島全圖》現臧於美國國會圖書館以下為部分截圖《臺灣及澎湖列島全圖》這幅地圖由福建地方長官李聯琨設計和繪製,作為給該省總督行政管理參考的備忘錄。
  • 中國豎版地圖問世發行 南海諸島不再用插圖表示
    大幅面全開中國豎版地圖問世並發行   記者日前在湖南地圖出版社了解到,其與湖北省測繪學會共同編制的豎版《世界地勢圖》《世界知識地圖》,湖南地圖出版社獨立繪製的《中國地勢圖》《中華人民共和國地圖》地圖已得到國家測繪地理信息局的認可,獲得審圖號、書號,並正式出版發行。