最近有小伙伴需要使用 Stata 绘制欧洲地图,不过 Stata 绘制地图的时候自带的指北针和比例尺很丑,所以我制作了一套使用 Stata 绘制欧洲各国地图的数据,分为两个版本,带比例尺和指北针的 & 不带的比例尺和指北针的:
带指北针和比例尺的
该套数据包含如下几个文件:
- Europe_db.dta:欧洲各国属性数据;
- Europe_coord.dta:底图矢量数据;
- Europe_label.dta:各国文本标签坐标数据;
- Europe_line_db.dta:边界线条属性数据;
- Europe_line_coord.dta:边界线条矢量数据(还有比例尺和指北针的线条);
- polygon.dta:比例尺和指北针中黑色区域的矢量数据。
使用这份数据绘制填充地图的代码如下:
cd "/Users/ac/Desktop/使用 Stata 绘制欧洲各国地图/含指北针和比例尺/"
use Europe_db.dta, clear
set seed 100 gen value = uniform() * 100 spmap value using Europe_coord, id(ID) osize(vvthin ...) ocolor(white ...) clmethod(custom) clbreaks(0 20 40 60 80 100) fcolor("224 242 241" "178 223 219" "128 203 196" "77 182 172" "38 166 154") graphr(margin(medium)) polygon(data(polygon) fcolor(black) osize(vvthin)) label(data(Europe_label) x(X) y(Y) label(country) length(20) size(*0.6)) line(data(Europe_line_coord.dta) size(vthin ...) pattern(solid ...) color(black ...)) leg(order(2 "0~20" 3 "20~40" 4 "40~60" 5 "60~80" 6 "80~100") ring(1) pos(6) row(1))
gr export "pic1.png", width(2400) replace
|

绘制气泡地图,也就是在地图上添加散点,然后使用散点的大小表示值的大小。
data.csv 数据是全球 2016 年人口超过 100 万的大城市,ratio 变量是 2000~2016 年这些城市的人口增长率。
import delimited using "data.csv", clear
geo2xy lat lon, gen(lat1 lon1) projection(albers, 6378137 298.257223563 23 53 0 23) replace
keep if inrange(lat1, 3447099, 7974770) & inrange(lon1, -2702645, 1600000) destring, replace save pointdata, replace
|
然后就可以把这个散点数据绘制到地图上了:
use Europe_db.dta, clear
set seed 100 gen value = uniform() * 100 spmap value using Europe_coord, id(ID) osize(vvthin ...) ocolor(white ...) clmethod(custom) clbreaks(0 20 40 60 80 100) fcolor("224 242 241" "178 223 219" "128 203 196" "77 182 172" "38 166 154") graphr(margin(medium)) polygon(data(polygon) fcolor(black) osize(vvthin)) label(data(Europe_label) x(X) y(Y) label(country) length(20) size(*0.6)) line(data(Europe_line_coord.dta) size(vthin ...) pattern(solid ...) color(black ...)) leg(order(2 "0~20" 3 "20~40" 4 "40~60" 5 "60~80" 6 "80~100") ring(1) pos(6) row(1)) point(data(pointdata) x(lon1) y(lat1) proportional(ratio) shape(Oh ...) size(*0.4)) gr export "pic2.png", width(2400) replace
|

不带指北针和比例尺的
不带指北针和比例尺的数据使用方法类似:
use Europe2_db.dta, clear
set seed 100 gen value = uniform() * 100 spmap value using Europe2_coord, id(ID) osize(vvthin ...) ocolor(white ...) clmethod(custom) clbreaks(0 20 40 60 80 100) fcolor("224 242 241" "178 223 219" "128 203 196" "77 182 172" "38 166 154") graphr(margin(medium)) label(data(Europe2_label) x(X) y(Y) label(country) length(20) size(*0.6)) line(data(Europe2_line_coord.dta) size(vthin ...) pattern(solid ...) color(black ...)) leg(order(2 "0~20" 3 "20~40" 4 "40~60" 5 "60~80" 6 "80~100") ring(1) pos(6) row(1))
gr export "pic3.png", width(2400) replace
|

import delimited using "data.csv", clear
geo2xy lat lon, gen(lat1 lon1) projection(albers, 6378137 298.257223563 23 53 0 23) replace
keep if inrange(lat1, 3447099, 7974770) & inrange(lon1, -2702645, 1600000) destring, replace save pointdata, replace
use Europe2_db.dta, clear
set seed 100 gen value = uniform() * 100 spmap value using Europe2_coord, id(ID) osize(vvthin ...) ocolor(white ...) clmethod(custom) clbreaks(0 20 40 60 80 100) fcolor("224 242 241" "178 223 219" "128 203 196" "77 182 172" "38 166 154") graphr(margin(medium)) label(data(Europe2_label) x(X) y(Y) label(country) length(20) size(*0.6)) line(data(Europe2_line_coord.dta) size(vthin ...) pattern(solid ...) color(black ...)) leg(order(2 "0~20" 3 "20~40" 4 "40~60" 5 "60~80" 6 "80~100") ring(1) pos(6) row(1)) point(data(pointdata) x(lon1) y(lat1) proportional(ratio) shape(Oh ...) size(*0.4)) gr export "pic4.png", width(2400) replace
|

点击这里跳转到 RStata 短书平台获取附件:使用 Stata 绘制欧洲各国地图(带指北针和比例尺)
评论