前言
首先感谢连玉军老师的连享会,如果读者对spmap命令一点基础都没有的话,请首先阅读连享会的推文:
Stata:空间计量之用 spmap 绘制地图
本文主要是分享下我个人使用spmap绘制地图的一点点经验,主要是如何处理中国地图和当绘制城市层面的数据时如何让读者更清晰地识别城市。
如何同时清晰地展示省界和市界
反面例子
先上一个反面例子,下图中使用的数据是2005年城市级别的人口密度,白色区域表示数据缺失。可以看到这样的图片无法直观的区分大部分城市,对于读者是非常不友好的。我们可以通过加入省界的方式来区分省级区域,从而让读者比较好的识别具体城市位置。
这里使用的就是最基本的命令:
spmap 人口密度 using "city_map2",id(id)
其中city_map2就是地级市级别的coord文件。

进一步改善:加入省界
如下图所示,改善后的图片中地级市界限以灰色显示,省级界限以黑色显示(当然那些缺失数据的地区界限还需要进一步改善)。
该图使用的命令如下:
spmap 人口密度 using "citycoord.dta",id(id) ///
fcolor(Reds2) ocolor(Greys) ///
title("人口密度图") ///
polygon( data("provincecoord.dta") ocolor(black))

其中,fcolor表示颜色方案,ocolor表示地级市界限的颜色。
polygon()选项的具体解释请参照spmap命令的help文档。
直观来理解polygon就是在using已使用的图层中再加入另一个图层,我使用的provincecoord.dta文件就是只有省级行政区域的coord文件,而省界的颜色通过polygon中的ocolor(black)指定为黑色。
进一步改善:处理缺失数据区域
上图中还存在的一个问题就是缺失数据的区域界限也是黑色,和省界混在一起非常难看,如果我们想突出展示已有数据部分,可以把缺失数据的地级市隐去,只保留相应的省界。
为了达到这个目的,使用的命令如下:
spmap 人口密度 using "citycoord.dta" if 人口密度!=.,id(id) ///
fcolor(Reds2) ocolor(Greys) ///
title("人口密度图") ///
polygon( data("provincecoord.dta") ocolor(black))

通过if选项去掉那些缺失值地区,我们就可以只保留缺失数据地区的省级界限,可以看到新疆西藏青海和台湾省的地级市界限都不见了,看起来非常简洁清爽。
举一反三,有时候我们还可以通过if选项来指定只画部分地区的地理分布图。
如何不显示南海地区
我们通过加入省界的方式,可以很清晰的界定全国主要城市。但受限于地图比例因素,南海地区占据了较大的面积,而我们在研究中往往不太关注南海地区。如果我们把南海地区隐去,就可以放大全国其他区域,从而更清晰的展示我们的结果。(使用正确的地图,维护国家主权和领土完整人人有责,在此我们只是为了便于展示,请各位在使用不完整地图时清晰的备注说明!)
上文中给出的连享会推文中也介绍了类似的问题,但是连享会是通过if选项去掉的,对于我们同时使用两个coord文件来说会比较麻烦。因为if选项只能去掉第一个coord文件中的相应区域,省级图层则依然会显示南海地区。因此,我选择直接把coord文件中位于南海的三沙市坐标删掉。
由于在省级coord文件中三沙市是海南省的一个组成部分,不能通过id来直接识别,因此需要根据经纬度来删除。而三沙市作为我国最南端的地级市其实也很好识别,只有三沙市的维度是小于北纬17度的,只需打开省级coord文件通过
drop if _x <17
就可以很完美的隐去三沙市了。
为了规避平台审核,具体效果就不放图片展示了,大家可以自行尝试.
本文介绍了如何使用Stata的spmap命令绘制清晰的中国地图,包括省界和市界的显示,处理缺失数据区域,以及不显示南海地区的技巧。通过调整颜色方案和使用if选项,使得地图更便于读者理解和视觉呈现。
4872





