本文内容较为简单,就不再进行视频讲解了~
今天给大家分享一份使用 Stata 绘制长三角 41 省市地图的数据和方法。
首先需要准备我特别设计的长三角 41 省市地图数据(包含指北针和比例尺):
jzmap 文件夹:地理矢量数据; labeldf.dta 数据:文本标签位置数据;
这份数据是使用 R 语言设计的,感兴趣的小伙伴可以参考附件中的 main.R
文件。
下面我们看一下如何在 Stata 中绘制长三角 41 省市地图。
首先把 shp 文件转换成 dta 文件:
*- 把 shp 文件转换成 dta 文件
local name = "jzmap"
shp2dta using `name'/`name', database(`name'_db) coordinates(`name'_coord) genid(ID) gencentroids(centroids) replace
shp2dta using `name'/`name'_line, database(`name'_line_db) coordinates(`name'_line_coord) genid(ID) gencentroids(centroids) replace
这样就会得到四个文件:
jzmap_db.dta jzmap_coord.dta jzmap_line_db.dta jzmap_line_coord.dta
其中前两个是底图的属性数据和坐标系数据,后面两个是线条的。
下面还需要对数据进行下调整。
首先是删除底图上的比例尺和指北针数据,因为这两个元素计划使用线条和多边形选项绘制:
use jzmap_db.dta, clear
*- 删除比例尺和指北针
drop if index(市, "_")
save jzmap_db.dta, replace
再创建比例尺和指北针的多边形数据:
use jzmap_coord.dta, clear
*- 保留指北针和比例尺对应的观测值
keep if _ID > 41
gen value = 1
save jzmap_polyon, replace
再对线条进行分组:
*- 线条
use jzmap_line_db.dta, clear
*- 分组
gen group = 1
replace group = 2 if index(市, "边界")
replace group = 3 if index(省, "边界")
replace group = 4 if index(省, "_")
keep ID group
ren ID _ID
save temp, replace
use jzmap_line_coord.dta, clear
merge m:1 _ID using temp
drop _m
save jzmap_line_coord, replace
统计 2021 年每个区县的年均 PM2.5 浓度:
import excel using "2000~2023年各城市PM10质量浓度年度数据.xlsx", clear first
keep if inlist(省, "江苏省", "浙江省", "上海市", "安徽省") & year == 2023
drop year sum min max sd
ren mean PM2_5
keep 市代码 PM2_5
save "PM2_5", replace
然后就可以绘制地图了:
use jzmap_db.dta, clear
merge 1:1 市代码 using PM2_5
drop if _m == 2
drop _m
*- 缺失值替换成 -1
replace PM2_5 = -1 if mi(PM2_5)
hist PM2_5
grmap PM2_5 using jzmap_coord.dta, ///
id(ID) osize(vvvthin ...) ocolor(white ...) ///
clmethod(custom) clbreaks(-1 0 40 50 60 70 80 90) ///
fcolor("gs12" "237 231 246" "209 196 233" "179 157 219" "149 117 205" "126 87 194" "103 58 183") ///
leg(off) ///
graphr(margin(medium)) ///
line(data(jzmap_line_coord.dta) by(group) ///
size(*0.2 *0.7 *1.2 *0.5) pattern(solid ...) ///
color("247 247 247" "150 150 150" black black)) ///
polygon(data(jzmap_polyon.dta) by(value) ///
osize(vvvthin ...) ocolor(black ...) ///
fcolor(black ...)) ///
label(data(labeldf.dta) x(X) y(Y) ///
label(cname) length(40 ...) size(*1 ...)) ///
ti("2021 年江浙沪皖各城市年均 PM2.5 浓度", size(*1)) ///
subti("数据处理&绘制:微信公众号 RStata", size(*1)) ///
caption("数据来源:国家青藏高原科学数据中心", size(*0.7))
课程信息
本文内容较为简单,就不再进行视频讲解了~
直播地址:腾讯会议(需要报名 RStata 培训班参加) 讲义材料:需要购买 RStata 名师讲堂会员,详情可阅读:一起来学习 R 语言和 Stata 啦!学习过程中遇到的问题也可以随时提问!
更多关于 RStata 会员的更多信息可添加微信号 r_stata 咨询:
附件下载(点击文末的阅读原文即可跳转):
https://rstata.duanshu.com/#/brief/course/cc6d5ddc0a1b493ba2e9bfef77192793