Stata绘制省级中国地图 | 版本 2.0

Stata绘制省级中国地图 | 版本 2.0

之前提供的 Stata 绘制省级地图教程中的地图数据也很老了,所以今天更新了下,本次更新的地图数据是基于 2019 年中国省级行政区划地图数据制作的。包含如下数据文件:

视频讲解

  1. 绘制带九段线小地图的中国省级行政区划地图的数据文件:

    • china_prov_full_map_db.dta
    • china_prov_full_map_coord.dta
    • china_prov_full_map_line_coord.dta
    • mybox_coord.dta
    • china_full_map_label.dta
  2. 绘制竖版中国省级行政区划地图的数据文件:

    • china_prov_full_map_long_db.dta
    • china_prov_full_map_long_coord.dta
    • china_prov_full_map_long_line_coord.dta
    • mybox_long_coord.dta
    • china_full_map_label_long.dta
  3. 示例数据

    • 示例数据.dta

下面我将演示这份数据的使用。

生成示例数据

首先生成一份示例数据,这次的数据包含省代码类型变量,更方便进行数据筛选和匹配。

1
2
3
4
5
* 构造示例数据
use china_prov_full_map_db, clear
keep
gen value = int(runiform(1, 84))
save 示例数据, replace

带九段线小地图的中国省级地图

下面我们就可以把示例数据和地图数据合并进行绘图了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use 示例数据, clear
merge 1:1 省 using china_prov_full_map_db
spmap value using china_prov_full_map_coord, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("Stata 绘制带九段线小地图的中国省级行政区划", color(black)) ///
graphr(margin(medlarge)) ///
subti("2019 年中国省级行政区划", color(black)) ///
caption("版本 2.0 | TidyFriday 出品", size(*0.8)) ///
osize(vvthin ...) ///
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)) ///
label(data(china_full_map_label) x(X) y(Y) l(NAME) color(gs10) size(*0.8 ...)) ///
line(data(china_prov_full_map_line_coord) size(*0.2 ...) color(black))

由于 china_prov_full_map_line_coord.dta 包含了全部省的边界和国界线,所以直接使用会产生这样一个问题,就是省界需要较细,但是九段线的框格和国界线我们想让它粗点,所以我们可以过滤出九段线框格和国界线:

1
2
3
4
5
6
use china_prov_full_map_line_coord.dta, clear

* 可以看出九段线框格和国界线对应的 ID 是 36 和 37

keep if _ID >= 36
save mybox_coord, replace

重新绘制地图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use 示例数据, clear
merge 1:1 省 using china_prov_full_map_db
spmap value using china_prov_full_map_coord, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("Stata 绘制带九段线小地图的中国省级行政区划", color(black)) ///
graphr(margin(medlarge)) ///
subti("2019 年中国省级行政区划", color(black)) ///
caption("版本 2.0 | TidyFriday 出品", size(*0.8)) ///
osize(vvthin ...) ///
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)) ///
label(data(china_full_map_label) x(X) y(Y) l(NAME) color(gs10) size(*0.8 ...)) ///
line(data(mybox_coord) size(*0.5 ...) color(black))

绘制竖版中国地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use china_prov_full_map_long_line_coord, clear
keep if _ID >= 36
save mybox_long_coord, replace

* 调整 china_full_map_label 中南海诸岛标签的位置
use china_full_map_label, clear
replace X = X - 1250000 if NAME == "南海诸岛"
replace Y = Y - 400000 if NAME == "南海诸岛"
save china_full_map_label_long, replace
use 示例数据, clear
merge 1:1 省 using china_prov_full_map_long_db
spmap value using china_prov_full_map_long_coord, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
ti("Stata 绘制中国省级行政区划(竖版)", color(black)) ///
graphr(margin(medlarge)) ///
subti("2019 年中国省级行政区划", color(black)) ///
caption("版本 2.0 | TidyFriday 出品", size(*0.8)) ///
osize(vvthin ...) ///
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)) ///
label(data(china_full_map_label_long) x(X) y(Y) l(NAME) color(gs10) size(*0.6 ...)) ///
line(data(mybox_long_coord) size(*0.5 ...) color(black)) ///
xsize(20) ysize(20)

省的类别

大家注意到这份地图数据里面有一个变量是省的类别,所以我们可以使用这个变量进行填充:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use china_prov_full_map_db, clear
encode 类型, generate(type)
codebook type
spmap type using china_prov_full_map_coord, id(ID) ///
fcolor("102 194 165" "252 141 98" "141 160 203" "231 138 195" "166 216 84") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5) ///
ti("Stata 绘制带九段线小地图的中国省级行政区划", color(black)) ///
graphr(margin(medlarge)) ///
subti("2019 年中国省级行政区划", color(black)) ///
caption("版本 2.0 | TidyFriday 出品", size(*0.8)) ///
osize(vvthin ...) ///
legend(size(*1.3) ///
order(2 "不统计" 3 "特别行政区" 4 "直辖市" 5 "省" 6 "自治区") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
label(data(china_full_map_label) x(X) y(Y) l(NAME) color(gs0) size(*0.8 ...)) ///
line(data(mybox_coord) size(*0.5 ...) color(black))

竖版的也没问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use china_prov_full_map_long_db, clear
encode 类型, generate(type)
codebook type
spmap type using china_prov_full_map_long_coord, id(ID) ///
fcolor("102 194 165" "252 141 98" "141 160 203" "231 138 195" "166 216 84") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5) ///
ti("Stata 绘制中国省级行政区划(竖版)", color(black)) ///
graphr(margin(medlarge)) ///
subti("2019 年中国省级行政区划", color(black)) ///
caption("版本 2.0 | TidyFriday 出品", size(*0.8)) ///
osize(vvthin ...) ///
legend(size(*1.3) ///
order(2 "不统计" 3 "特别行政区" 4 "直辖市" 5 "省" 6 "自治区") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
label(data(china_full_map_label_long) x(X) y(Y) l(NAME) color(gs0) size(*0.6 ...)) ///
line(data(mybox_long_coord) size(*0.5 ...) color(black)) ///
xsize(20) ysize(20)

好啦,这次更新就是这些内容了。

封面图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use china_prov_full_map_db, clear
encode 类型, generate(type)
spmap type using china_prov_full_map_coord, id(ID) ///
fcolor("166 206 227" "31 120 180" "178 223 138" "51 160 44" "251 154 153") ///
ocolor("white" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5) ///
graphr(margin(l=0 r=0 b=0 t=0)) ///
osize(vvthin ...) ///
legend(size(*1.5) ///
order(2 "不统计" 3 "特别行政区" 4 "直辖市" 5 "省" 6 "自治区") ///
ti(示例数据, size(*0.5) pos(11) color(white)) color(white)) ///
label(data(china_full_map_label) x(X) y(Y) l(NAME) color(gs0) size(*0.8 ...)) ///
line(data(mybox_coord) size(*0.8 ...) color(white)) ///
xsize(10) ysize(8.5) name(a, replace) nodraw

use china_prov_full_map_long_db, clear
encode 类型, generate(type)
codebook type
spmap type using china_prov_full_map_long_coord, id(ID) ///
fcolor("166 206 227" "31 120 180" "178 223 138" "51 160 44" "251 154 153") ///
ocolor("white" ...) ///
clmethod(custom) clbreaks(0 1 2 3 4 5) ///
graphr(margin(l=0 r=0 b=0 t=0)) ///
osize(vvthin ...) ///
legend(off) ///
label(data(china_full_map_label_long) x(X) y(Y) l(NAME) color(gs0) size(*0.6 ...)) ///
line(data(mybox_long_coord) size(*0.8 ...) color(white)) ///
xsize(10) ysize(8.5) name(b, replace) nodraw

gr combine a b, xsize(20) ysize(8.5) ///
ti("Stata 绘制带九段线小地图的中国省级地图", ///
color(white) pos(12) size(*1.8)) ///
subti("2019 年中国省级行政区划", ///
color(white) pos(12) size(*1.5)) ///
caption("版本 2.0 | TidyFriday 出品") ///
plotr(fcolor(24 24 24) lcolor(24 24 24) margin(medium)) ///
graphr(fcolor(24 24 24) lcolor(24 24 24) margin(medium))

gr export "title.png", width(3000) height(1277) replace

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

#

评论

Your browser is out-of-date!

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

×