1. 首页
  2. 大数据

《用地图说话》之:十字绣中国热力数据地图

作图思路:

准备一块300*300小单元格组成的区域,对照地图图形,在每个省图形范围内的单元格填入该省的数据,然后对这些单元格应用条件格式->色阶,就形成了一幅热力地图。这一做法参考了Jorge Camoes 的帖子http://t.cn/zTDvGNb。

不过本帖对其继续改进,利用条件格式设置单元格的边框线,来绘制省界线条,避免了地图图形的线条与单元格之间吻合精度不够的问题,使地图更整洁干净。

作图步骤:

1、在MapCells工作表中准备约300*300个单元格区域,设置行高列宽,使单元格呈小正方形。把这个区域定义名称为MapCells,便于后续选中设置。

2、在这个区域上放置一个透明的中国地图轮廓图形。《用地图说话》范例包中提供了这样的素材,复制粘贴过来,调整大小,设置无填充色即可。

3、依据地图图形,在每个省图形框住的格子里,填写公式,查找引用该省的指标值。以新疆为例,新疆的图形框住的单元格,其公式均填写为:

=VLOOKUP(“新疆”,mydata,2,0)

其中mydata是在Data表中放置的省名+指标数据。如下图所示。

《用地图说话》之:十字绣中国热力数据地图

这一步是本做法的主要步骤。由于格子数有约300*300个之多,这显然是个绣花般的工作,所以我称之为十字绣做法。美国地图还好,州界都横平竖直的,打点较容易,中国地图的省界都蜿蜒曲折的,打好点需要巨大的耐心。

幸好的是,我在网上找到了一个Excel文件,它有约200*250个格子,格子里填写的是1~34个数字,对应每个省,形成一幅中国分省地图。不知道它原来是怎么填写的,反正看起来精度还不错。用宏把1~34的数字替换成对应的vlookup公式,就自动化地完成了十字绣这个细活。过程就不讲了,反正电脑也被折腾死了,200*250个格子要查找填写呢。

4、绣完花后,在MapCells表通过名称框选中MapCells区域,根据需要为其设置条件格式->色戒。咦,错了,应该是色阶。根据指标需要选择一种色阶样式,这里你可以进行充分的配色自定义。

《用地图说话》之:十字绣中国热力数据地图

5、在Data表准备10个单元格,取值为指标值范围的10等分,可以用公式填写:

=PERCENTILE($D$6:$D$42,10%)

后面为20%、30%……100%。为这些单元格设置与前面相同的条件格式->色阶效果,作为地图的图例。

《用地图说话》之:十字绣中国热力数据地图

考虑到可能需要手动指定图例最大最小值的范围,要保证地图和图例的条件格式->色阶效果一致,可以把D41、D42处的最大最小值引用到地图区域MapCells里的某个格子,这样地图区域和图例区域拥有一致的最大最小值,色阶效果也就会一致。具体见范例文件中MapCells区域图例遮住的位置。

6、把data表的图例单元格区域拍照引用到MapCells表的地图区域的左下角,放大至合适。再把地图区域MapCells拍照引用到Report表,缩小到合适,完成地图模型。

现在,在Data表输入或改变指标值,Report表的地图就可以刷新,测试地图模型并确认正确性。

在之前提供的范例文件里,由于我是先有格子,再用地图图形对齐格子的,并没有实际进行十字绣打点,所以边界吻合并不佳,当时也无暇去精细化。

update@20140222:后来想到的做法是,不使用这个地图图形,而是对MapCells区域使用条件格式,与周边的单元格进行比较判断,是否为省界,而自动设置边框线,来绘制各省边界。条件格式设置如下图:

《用地图说话》之:十字绣中国热力数据地图选中MapCells区域,条件格式->新建规则,新建4条规则:

  • =J10<>J9,那么显示上边框线

  • =J10<>J11,那么显示下边框线

  • =J10<>I10,那么显示左边框线

  • =J10<>K10,那么显示右边框线

比较判断的示意图如下:

《用地图说话》之:十字绣中国热力数据地图

注意都是以相对地址的形式输入公式,那么整个MapCells区域的每个格子都会与它周围的4个格子进行比较,不一致就显示相应的边框,从而形成各省的边界线。

最后绘出的地图如下,非常干净,并且边界线很有一股写意的意味。要导出到PPT、word中,只需要复制这个拍照图片对象即可。《用地图说话》之:十字绣中国热力数据地图

本例做法涉及到的知识点:Vlookup查找,条件格式-色阶,一般条件格式,拍照引用,以及耐心。

原文始发于微信公众号(PPV课数据科学社区):《用地图说话》之:十字绣中国热力数据地图

原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/28360

联系我们

4000-51-9191

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息