ssc install spmap
spmap的語法可以分為三層,spmap也是通過疊加這三個圖層來實現繪圖的。
第一層:底層地圖(basemap)。代表由多個子區域組合而成研究區域,如在世界地圖中,各個國家和地區即為該地圖的子區域。在Stata中,構造底層地圖的數據集(countries_cor.dta)結構如下圖所示:
cd D:\sus_part3\data
use countries_cor.dta,clear
scatter _Y _X,msize(vtiny)
use draw_dbf.dta,clear //master數據集包含了[attribute]變量SUM
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) /// **設置標識變量,分級類型為用戶自設**/
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) /**設置分段,設置漸變色為紅色漸變**/
**從世界地圖中將構建美國區域的坐標對另存為USA_cor.dta**
use countries_cor.dta,clear
keep if _ID==252
save USA_cor.dta,replace
use draw_dbf.dta,clear
**第一層,底層地圖**
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) ///
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) /// **第二層,突出顯示美國區域,藍色填充,輪廓線粗細適中**/
polygon(data(USA_cor.dta) fcolor(blue) osize(medthin))
use draw_dbf.dta,clear
**第一層:底層地圖**
spmap using countries_cor.dta, id(_ID) /// **第二層:在底層地圖上描點,world_point.dta包含了描點的坐標xcoord和ycoord變量**/
point(data(world_point.dta) xcoord(xcoord) ycoord(ycoord) /// **第二層美化:設置比例變量為SUM,填充顏色為彩虹色**/
proportional(SUM) shape(o) size(large) by(_ID) fcolor(Rainbow))
use draw_dbf.dta,clear
**第一層:底層地圖**
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) ///
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) ///
polygon(data(USA_cor.dta) fcolor(blue) osize(medthin)) /// **第二層:突出顯示美國子區域**/
title("世界主要國家和地區在Sustainability發表論文的數量",size(*1.2)) subtitle("Jan.2009-Sep.2020",size(*0.8)) /// **第三層:添加圖例、標題等其他元素**/
graphregion(margin(medium)) ///
note("Source:爬蟲俱樂部整理")
綜合來看,使用spmap作圖有兩大難點。
(1)獲取坐標數據集難
在第二部分的簡單應用中,我們所用到的坐標數據集有:countries_cor.dta:世界國家級地圖坐標數據集,是使用shp2dta命令轉換countries.shp文件而來。而.shp由ESRI(Environmental Systems Research Institute)開發的shape文件,一個shape文件包括一個主文件,一個索引文件,和一個dBASE表。其中主文件的後綴就是.shp。
ssc install shp2dta
shp2dta using countries.shp, ///
database("countries_dbf") coordinates("countries_cor")
use draw_dbf.dta,clear
merge 1:1 NAME using countries_dbf.dta,keepusing(_ID)
這樣,我們就通過_ID標識變量將master數據集與basemap數據集聯結起來了。這也給我們一個提示:在整理自己的數據集(master)時應儘可能使每個觀測對象的名稱(NAME,比如國家名稱、省市名稱等)與countries_dbf.dta中一致。
本文用到的所有數據集均可通過後臺回復spmap獲取,快去打開Stata試試看吧~