中国省市自治区行政区域数据可视化

 

本文总结对比三种基于地理信息的数据可视化工具。

动机

近期的论文中需要对省市自治区数据进行可视化, 查询资料后获取如下的解决方案:

  • Excel Power Map
  • Matlab geoshow/mapshow
  • Mapshaper

需求说明

本次需要绘制的数据图为区域图, 即对各省市自治区按照数值大小用不同颜色反映出数据的差异, 将相应区域整体着色。

Demo

charging pile
中国各省市自治区电动汽车公共充电桩数量分布(截至2017年12月)

如图所示, 通过区域绘图的方式绘制了充电桩的分布情况(MATLAB实现)。其他与省市相关的数据可视化均可以通过这种方式展示。

解决方案

下面分别对以上方案进行简单介绍与对比。

Excel Power Map

自Office 2016以来, Excel 集成了Power Map功能(使用时需要联网); Office 2013需要单独下载安装Power Map工具; 再之前的版本不支持该功能。Power Map的优势在于上手方便, 无需编程。在Excel表格中选中相应的数据即可添加至Power Map加载项中即可实现相应的需求。需要注意的是:该功能中务必将省市自治区的名称完整写出, 例如:北京市、广东省、广西壮族自治区, 不能写为北京、广东、广西; 否则在选择数据类型时无法准确识别。此外, Power Map可以选择不同的数据表示方式, 包括:柱状图、热力图、区域图; 根据需求, 我们需要采用区域图。

优点

  • 上手快, 无需编程

缺点

  • 颜色只能选择单一色调, 颜色深浅是按照原有数据自动配置色彩深浅。(这一点可以通过对数据预处理解决, 对原始数据先进行分级)
  • 地图为世界地图, 无法单独抠出中国地图
  • 图例形式单一

Matlab geoshow/mapshow

Matlab中提供了地图绘制的函数, geoshowmapshow

可以方便地从地图文件(Shapefile, .shp)中提取经纬度信息, 绘制成地图。具体的操作如下代码所示:

s = shaperead('省界_region.shp'); % load shapefile
axesm('mercator') % set projection type as mercator projection
set(gca, 'Color', 'none') % set background transparent
set(gca,'XColor','none'); set(gca,'YColor','none'); % set boundary transparent
for k = 1 : length(s)
geoshow(s(k).Y, s(k).X, 'DisplayType', 'polygon');
hold on

首先读取地图文件, 存储为地图结构体, 其中包括34个省市自治区的边界信息; 然后设置坐标轴的投影类型为墨卡托投影(这一点在后面会补充提到); 设置坐标轴以及背景为空为了仅显示地图而不显示背景与坐标轴; 通过循环利用geoshow函数绘制各个省市自治区。geoshow函数的用法如下:

handle = geoshow(lan, lon, 'DisplayType', 'polygon', 'FaceColor', [r, g, b]); 与普通的plot函数用法别无二致。通过设置facecolor即可完成对区域着不同颜色的目标, 而此处着色的方式就更为自由; handle为图形的句柄, 可以为后续设置图例使用。总结MATLAB geoshow/mapshow方式的优缺点如下:

优点

  • 自由度高, 能达成所有目标
  • 了解matlab而言, 上手容易

缺点

  • 需要安装matlab
  • 有一定门槛

Mapshaper

mapshaper是一个开源地图编辑软件, 由纽约时报记者Matthew Bloch开发。该工具基于Node.js开发, 可以在windows, Mac OS, Linux系统下安装, 或者由其提供的web端运行, 该工具使用方便, 功能丰富。以web端为例, 用户只需要将地图文件(以shapefile为例, 是.zip压缩包)拖拽至web端, 网页将自动加载地图文件; 网页端提供控制台(console), 用户可以在控制台中输入相关的命令即可完成对地图的编辑, 从而实现数据可视化的目标。(该web端提供解析地图的本地脚本, 并不需要将数据上传至服务器, 因此安全性与操作性都可以保障)下面的命令行脚本将提供相关的数据可视化功能示例:

mapshaper 省界_region.shp -join evse_distribution.csv keys=ID,ID fields=evse_number -o joined.shp

以上代码完成的功能是将外部数据添加到地图文件中, 便于后续的数据展示。

mapshaper joined.shp -svg-style fill="#CCE5FF" where="evse_numbe <= 1000" -svg-style fill="#99CCFF" where="evse_numbe > 1000 && evse_numbe <= 3000" -svg-style fill="#66B2FF" where="evse_numbe > 3000 && evse_numbe <= 5000" -svg-style fill="#3399FF" where="evse_numbe > 5000 && evse_numbe <= 10000" -svg-style fill="#0080FF" where="evse_numbe > 10000 && evse_numbe <= 20000" -svg-style fill="#0066CC" where="evse_numbe > 20000 && evse_numbe <= 25000" -svg-style fill="#004C99" where="evse_numbe > 25000" -svg-style stroke-width=1.5 -svg-style stroke="black" -proj merc -o evse_numbers.svg

以上代码完成对载入数据的可视化展示并生成svg格式图片。

其中的主要语句包括:-join, -svg-style, -proj以及-o

优点

  • 自由度高, 无需安装任何软件(web接口)

缺点

  • 有一定编程门槛
  • 图例不便于程序化实现

注意: dbf文件写入时, 对于非ascii编码文件, 字段长度截断为10个字符; 因此在以上的代码中“evse_number”在后续调用时变成了“evse_numbe”; 这一点在此前的版本没有截断提示, 近期更新作者已完善提醒

其他

地图文件格式

Shapefile格式与说明如下:

xxx.zip
   |--- xxx.dbf:    属性数据格式, 以dBase IV的数据表格式存储每个几何形状的属性数据。
   |--- xxx.prj:    投帧式, 用于保存地理坐标系统与投影信息。
   |--- xxx.shp:    图形格式, 用于保存元素的几何实体。
   |--- xxx.shx:    图形索引格式。

投影算法

地图的投影算法决定了地图数据展示的效果; 国内常用的投影算法为墨卡托投影。详细的投影算法介绍可以参见文章

中国省界地图下载

下载链接:谷歌云盘, 百度云盘

解压密码:malagis.com