Stata 绘制中国县级地图的终极解决方案!

Stata 绘制中国县级地图的终极解决方案!

终于 Stata 绘制中国县级地图的解决方案也来啦!本文推出的数据有 4 套,两套是兰勃特等角投影的(+proj=lcc),两套是没有投影的(CGS2000坐标系)。下面我就逐一介绍这四套数据的使用。

视频讲解

兰勃特等角投影(竖版)

因为之前的省级和市级地图都是使用兰勃特等角投影,所以这里自然也会提供一套,这样可以方便大家使用这些数据进行组合绘图。

数据:

  1. china_county_long_coord.dta
  2. china_county_long_db.dta
  3. china_county_long_line_coord.dta

首先我生成一份示例数据:

1
2
3
4
5
use china_county_long_db, clear
* 生成随机数
gen value = int(runiform(1, 84))
keep 省 市 县 value
save 示例数据, replace

绘制地图的第一步是把你要绘制的数据和地图数据合并:

1
2
3
4
use china_county_long_db, clear
merge 1:1 省 市 县 using 示例数据
* 只保存合并成功的
keep if _m == 3

然后使用 spmap 或者 grmap(Stata 15及以后版本的官方命令,用法和 spmap 相同) 命令绘图:

如果你的 Stata 无法使用 spmap 正确绘图,可以尝试先运行 grmap, activate,然后将下面代码中的 spmap 替换成 grmap 运行(注意下面这一段代码是一句命令,必须同时选中运行):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spmap value using china_county_long_coord.dta, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("gray" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("Stata 绘制带九段线的中国县级地图", size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年中国县级行政区划(兰勃特等角投影)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(0 ...) ///
legend(size(*1.3) ///
order(2 "0~14" 3 "14~28" 4 "28~42" 5 "42~56" 6 "56~70" 7 "70~84") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
line(data(china_county_long_line_coord) size(*0.5 ...) color(black) select(keep if _ID == 2901)) ///
xsize(13) ysize(10)

gr export 中国县级地图.png, replace width(2600) height(2000)

这份数据里面包含了县的类别,我们可以绘制展示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use china_county_long_db, clear
encode 类型, generate(type)
tab type
spmap type using china_county_long_coord.dta, id(ID) ///
fcolor("58 9 99" "96 19 110" "133 33 107" "169 46 94" "203 65 73" "230 93 47" "247 131 17" "252 173 18" "245 219 75" "252 255 164") ///
ocolor("white" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5 6 7 8 9 10) ///
ti(Stata 绘制带九段线的中国县级地图, size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年中国县级行政区划(兰勃特等角投影)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(0 ...) ///
legend(size(*1.3) ///
order(2 "不统计" 3 "县" 4 "县级市" 5 "地级市" 6 "市辖区" 7 "旗" 8 "林区" 9 "特区" 10 "自治县" 11 "自治旗") ///
ti(类型, size(*0.5) pos(11) color(black)) color(black)) ///
line(data(china_county_long_line_coord) size(*0.5 ...) color(black) select(keep if _ID == 2901)) ///
xsize(13) ysize(10)

gr export 中国县级行政区划.png, replace width(2600) height(2000)

我们还可以选择某个省的或者某个市的进行绘制,例如安徽省的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
* 绘制某个省的
use 示例数据, clear
keep if 省 == "安徽省"
merge 1:1 省 市 县 using china_county_long_db
* 只保存合并成功的
keep if _m == 3
spmap value using china_county_long_coord.dta, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("gray" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("安徽省县级地图", size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年县级行政区划(兰勃特等角投影)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(*0.1 ...) ///
legend(size(*1.3) ///
order(2 "0~14" 3 "14~28" 4 "28~42" 5 "42~56" 6 "56~70" 7 "70~84") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
xsize(8) ysize(10) ///
line(data(china_county_long_line_coord) size(*0.1 ...) color(black) select(keep if inrange(_ID, 905, 1009))) ///
label(data(china_county_long_db) x(x_centroid) y(y_centroid) l(县) color(black) select(keep if inrange(ID, 905, 1009)) size(*0.6))

gr export 安徽县级地图.png, replace width(1600) height(2000)

广州市的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
* 绘制某个市的
use 示例数据, clear
keep if 市 == "广州市"
merge 1:1 省 市 县 using china_county_long_db
* 只保存合并成功的
keep if _m == 3
spmap value using china_county_long_coord.dta, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("gray" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("广州地图", size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年县级行政区划(兰勃特等角投影)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(*0.1 ...) ///
legend(size(*1.3) ///
order(2 "0~14" 3 "14~28" 4 "28~42" 5 "42~56" 6 "56~70" 7 "70~84") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
xsize(8) ysize(10) ///
line(data(china_county_long_line_coord) size(*0.1 ...) color(black) select(keep if inrange(_ID, 1715, 1725))) ///
label(data(china_county_long_db) x(x_centroid) y(y_centroid) l(县) color(black) select(keep if inrange(ID, 1715, 1725)) size(*0.8))

gr export 广州地图.png, replace width(1600) height(2000)

组合多个省市的自然也没有问题,例如安徽省和江苏省:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
* 绘制多个省的
use 示例数据, clear
keep if 省 == "安徽省" | 省 == "江苏省"
merge 1:1 省 市 县 using china_county_long_db
* 只保存合并成功的
keep if _m == 3
spmap value using china_county_long_coord.dta, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("gray" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("安徽省 & 江苏省县级地图", size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年县级行政区划(兰勃特等角投影)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(*0.1 ...) ///
legend(size(*1.3) pos(5) ///
order(2 "0~14" 3 "14~28" 4 "28~42" 5 "42~56" 6 "56~70" 7 "70~84") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
xsize(8) ysize(10) ///
line(data(china_county_long_line_coord) size(*0.1 ...) color(black) select(keep if inrange(_ID, 905, 1009) | inrange(_ID, 719, 814))) ///
label(data(china_county_long_db) x(x_centroid) y(y_centroid) l(县) color(black) select(keep if inrange(ID, 905, 1009) | inrange(ID, 719, 814)) size(*0.6))

gr export 安徽江苏县级地图.png, replace width(1600) height(2000)

未投影 & 2000国家大地坐标系(竖版)

这套数据包含:

  1. china_county_long_coord.dta
  2. china_county_long_db.dta
  3. china_county_long_line_coord.dta

使用示例数据绘制及地图分拆的方法和上面的相同,下面不再演示,仅仅展示行政区划类别地图的绘制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use china_county_long_lonlat_db, clear
encode 类型, generate(type)
spmap type using china_county_long_lonlat_coord, id(ID) ///
fcolor("58 9 99" "96 19 110" "133 33 107" "169 46 94" "203 65 73" "230 93 47" "247 131 17" "252 173 18" "245 219 75" "252 255 164") ///
ocolor("white" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5 6 7 8 9 10) ///
ti(Stata 绘制带九段线的中国县级地图, size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年中国县级行政区划(未投影 & 2000国家大地坐标系)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(0 ...) ///
legend(size(*1.3) ///
order(2 "不统计" 3 "县" 4 "县级市" 5 "地级市" 6 "市辖区" 7 "旗" 8 "林区" 9 "特区" 10 "自治县" 11 "自治旗") ///
ti(类型, size(*0.5) pos(11) color(black)) color(black)) ///
line(data(china_county_long_lonlat_line_coord) size(*0.5 ...) color(black) select(keep if _ID == 2901)) ///
xsize(13) ysize(10)
gr export 中国县级行政区划_未投影.png, replace width(2600) height(2000)

兰勃特等角投影(带九段线小地图)

这套数据包含:

  1. china_county_db.dta
  2. china_county_coord.dta
  3. china_county_line_coord.dta

绘制地图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
* 绘制地图
use china_county_db.dta, clear
encode 类型, generate(type)
tab type
spmap type using china_county_coord.dta, id(ID) ///
fcolor("58 9 99" "96 19 110" "133 33 107" "169 46 94" "203 65 73" "230 93 47" "247 131 17" "252 173 18" "245 219 75" "252 255 164") ///
ocolor("white" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5 6 7 8 9 10) ///
ti(Stata 绘制带九段线小地图的中国县级地图, size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年中国县级行政区划(兰勃特等角投影)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(0 ...) ///
legend(size(*1.3) ///
order(2 "不统计" 3 "县" 4 "县级市" 5 "地级市" 6 "市辖区" 7 "旗" 8 "林区" 9 "特区" 10 "自治县" 11 "自治旗") ///
ti(类型, size(*0.5) pos(11) color(black)) color(black)) ///
line(data(china_county_line_coord.dta) size(*0.5 ...) color(black) select(keep if _ID >= 2901)) ///
xsize(13) ysize(10)

gr export 中国县级地图_带九段线小地图版本.png, replace width(2600) height(2000)

未投影 & 2000国家大地坐标系

这套数据包含:

  1. china_county_longlat_coord.dta
  2. china_county_longlat_line_coord.dta
  3. china_county_longlat_db.dta

绘制地图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use china_county_longlat_db.dta, clear
encode 类型, generate(type)
tab type
spmap type using china_county_longlat_coord.dta, id(ID) ///
fcolor("58 9 99" "96 19 110" "133 33 107" "169 46 94" "203 65 73" "230 93 47" "247 131 17" "252 173 18" "245 219 75" "252 255 164") ///
ocolor("white" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5 6 7 8 9 10) ///
ti(Stata 绘制带九段线小地图的中国县级地图, size(*1.1) color(black)) ///
graphr(margin(medium)) ///
subti("2019 年中国县级行政区划(未投影 & 2000国家大地坐标系)", color(black)) ///
caption("版本 1.0 | TidyFriday 出品", size(*0.8)) ///
osize(0 ...) ///
legend(size(*1.3) c(2) ///
order(2 "不统计" 3 "县" 4 "县级市" 5 "地级市" 6 "市辖区" 7 "旗" 8 "林区" 9 "特区" 10 "自治县" 11 "自治旗") ///
ti(类型, size(*0.5) pos(11) color(black)) color(black)) ///
line(data(china_county_longlat_line_coord.dta) size(*0.5 ...) color(black) select(keep if _ID >= 2901)) ///
xsize(13) ysize(10)

gr export 中国县级地图_带九段线小地图版本_lonlat.png, replace width(2600) height(2000)

未来我还会讲解如何使用省市县的地图数据进行组合绘图,敬请期待。

知识星球附件链接:https://t.zsxq.com/a6amiem

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×