用Excel做出强大漂亮的数据地图

摘要:看了知乎上大部分关于如何用excel做数据地图的回答,感觉最费劲的地方都在地图素材上,有用多边形描出来的(有点儿累),有推荐excel插件的(不喜欢依赖插件或软件包),这样多多少少缺少了弹性(当然你也可以网上找一个人家做好的)。我个人比较喜欢从零DIY,学会了整套方法,以后遇到任何问题都可以解决。

正好有朋友在我的一些回答中问过我,我的那些热感地图怎么做出来的。借这个机会,我毅然决定,专写一篇文章来说说我的数据地图是怎么画的。


很简单,按照我的方法,六步你就可以画出自己的热感地图,不需要GIS软件,各种地图都适用。


前提:你要有Excel这个软件啊(否则搞毛)还要能上网啊(能看到这回答说明正在上网吧?)


第一步:需要一张普通的地图图片

这个很简单,网上到处都有。中国的省级地图,地级市地图,甚至县级地图都可以找到。这里两个小要求:1)尽量找张干净的图,干净指的是地图的边界清晰;2)svg格式的图(Scalable Vector Graphics)- 别慌,推荐你个下载svg格式地图模板的好去处 Wikimedia Commons


在这个网站搜索China provinces,可以得到下面这些图(上百张),第一张图就很符合我们的要求:

用Excel做出强大漂亮的数据地图插图

第二步:打开下载的svg图。这里推荐个免费开源的软件:Inkscape。用这个软件打开svg的地图,然后另存为Enhanced Meta File(emf)格式的文件。


第三步:用excel导入emf的文件,然后ungroup这个地图变成freeform的图形,如下图。

用Excel做出强大漂亮的数据地图插图(1)


这样我们就得到了excel里面的地图素材。


第四步:每个省现在对应的名字都没有,我们需要重新命名。简单的方法:鼠标点击选一个省,在左上角公式旁边的文本框里输入省的名字,如下图:

用Excel做出强大漂亮的数据地图插图(2)

第五步:在excel里另建一个worksheet,按照下图来设计数据版面:


更新:F列每个颜色的单元格漏写了对应的命名,比如白色的单元格,将其命名为对应的J列的值(classpro0)

用Excel做出强大漂亮的数据地图插图(3)

渐变颜色可以自己选择,目前这个例子是从0到5六种类别(颜色),根据你的研究需要(比如各省人均收入水平你按照高低分了10类,那就10种),随便改多少种都可以,唯一注意的就是命名的区域要跟着变。再啰嗦一下:根据你自己的分类标准,筛选你的数据,将筛选后的分类结果(比如6种 0-5)对应到之前提到的类别中,这样也就对应好了颜色。


第六步:这些都做完了,在地图那页worksheet里面加个按钮,把下面这段VBA程序copy进去:


1
2
3
4
5
6
7
<span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">For</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> i </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">=</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(174, 129, 255);word-wrap: break-word !important;">2</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">To</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(174, 129, 255);word-wrap: break-word !important;">32</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(230, 219, 116);word-wrap: break-word !important;">'这里是省的数量,2代表的是后面连接的数据表起始位是第二行,可以根据你自己的设计更改

    Range("actRegProvince").Value = Range("Data_Province!D" &amp; i).Value '</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">按顺序选取数据表中省份</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;">
    
    </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">ActiveSheet</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">.</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">Shapes</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">(</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">Range</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">(</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(230, 219, 116);word-wrap: break-word !important;">"actRegProvince"</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">).</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">Value</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">).</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">Select</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> </span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(230, 219, 116);word-wrap: break-word !important;">'激活对应的省份地图

    Selection.ShapeRange.Fill.ForeColor.RGB = Range(Range("actRegCodeProvince")).Interior.Color '</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(248, 248, 242);word-wrap: break-word !important;">将数据表中省份对应的颜色类别赋值给对应的省份地图</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"></span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(166, 226, 46);word-wrap: break-word !important;">Next</span><span class="" style="max-width: 100%;box-sizing: border-box;color: rgb(102, 217, 239);word-wrap: break-word !important;"> i</span>

补充说明:Data_Province!D中Data_Province是数据表(worksheet)的名字,D指的是

补充说明:Data_Province!D中Data_Province是数据表(worksheet)的名字,D指的是省份名字所在的列(见上面那张截图)。根据自己的需要可以改成你喜欢的名字或位置。


第七步:这步不算了啊!就是六步~


点击按钮,享受成果,不谢!


把刚才的地图换成紫色渐变色,效果如下:

用Excel做出强大漂亮的数据地图插图(4)

我过去的研究用过的一些样图(ps: 数据原因,有些图未包含台湾)


地级市级别方言地图

用Excel做出强大漂亮的数据地图插图(5)

地级市层面经济集群图

用Excel做出强大漂亮的数据地图插图(6)

神经网络算法分类中国地级市

用Excel做出强大漂亮的数据地图插图(7)

同样方法制作县级地图

用Excel做出强大漂亮的数据地图插图(8)



本文经【钱粮胡同】授权数据分析网发布,转载请联系原作者
专栏链接:https://zhuanlan.zhihu.com/p/20756711

点赞