Excel上玩出这么硬核的地图应用,李强老师的确有一手,不要以为在Tableau或PowerBI上轻松做出来,在Excel上做就没价值,论传播力Excel胜过前两者无数,稍加点自动化,就可以在Excel上自动做此类报表,非常有应用价值。
又到一年春运时。百度公司早在2014年春运期间推出了百度迁徙项目,首次启用百度地图定位可视化大数据播报了国内春节人口迁徙情况,引发了巨大关注。效果如图:
紧随其后,Excel数据可视化圈内扛把子,刘万祥老师用Excel做了一个十分相似的人口迁徙地图交互式可视化图表。这份人口迁移地图构思之巧妙,制图之精湛,功力之深厚,一览无遗,叹为观止。效果如图:
曾经在学习完该图表的完整制作方法后,曾请教过刘老师有没有从全国各省下钻到省内各地市的图表,但是很遗憾。
在理工男旺盛的好奇心、完成工作任务的成就感双重驱动下,历经周折,多次试错,最终我成功做出了带有下钻功能的地图,下钻后可查看省内城市的流向(也即所谓原文中的迁徙地图),效果如图:
下面,请和我一起看看是如何实现的吧。
步骤一:需要深刻理解省份级别的交叉销量流向制图原理
如有不清楚的可以再翻阅刘万祥老师的博文。这里简要回顾下:
作图思路:
迁徙射线可用散点图绘制,迁徙数量可用气泡图绘制。由于气泡图不允许再组合其他图表类型,故分别做散点图和气泡图,其中散点图绘图区填充地图图片,气泡图全透明,然后两个图表叠加在一起,得到迁徙地图。
制作步骤:
1、首先做射线图
2、再做气泡图
3、组合图表
4、检查模型
5、夜视风格
省内城市级别的交叉销量流向地图的制作思路和方法与省级别的基本相同。唯一有些区别的是XY坐标不再是固定的31省市,而是按照不同省份筛选出来的省内各地市坐标;此外,将本省内之外的所有交叉销量统称为省外。
步骤二:准备相应素材
2.1准备原始数据表:将原始数据用数据透视表处理成如下格式
注:
1)行字段是经销商所在城市,列字段是客户所在城市;
2)行和列均有总计,目的是后期计算省外的交叉销售数值;
3)为后期作图美观,行和列城市一致时将其值设置为0;
2.2利用原始图复制粘贴,分别制作各省市射线图和气泡图,并在填充了省市底图后,记录下该省内各城市XY坐标:
注:
1)省份,城市,X,Y是必须字段;
2)省市之间留需要留一空列,用于VBA编程时CurrentRegion属性的使用;
3)X,Y坐标来自于填充了各省市背景地图的散点图,具体操作方法请参考全国省级别销售流向分析制图方法。
2.2.1分别用各省地图底图作为图片,填充进下图图表区,并记录下该省份XY坐标,汇总到坐标汇总表中。
2.2.2为每个省的射线图分别准备对应的气泡图,这一步相对容易,只需不断复制粘贴下图的气泡图即可。
2.3组合散点图和气泡图:新建一张新的工作表,命名为“省市交叉销售”,进行两者的组合。示例如下:
注:
1)将所有省份的图表组合后排成一列,便于后期使用INDEX定义名称动态引用图片。
2)注意射线图和气泡图的四个角完全对齐,这样射线端点和气泡图中心才能对齐。
3)通过以上操作,实际上我们得到了除港澳台之外的全国31省市的组合图表。因为是同一个基础图表粘贴而成,这些组合图表除了背景省份地图不一致之外,射线图和散点图是完全一样的。
步骤三:定义名称动态引用图表
Step1:将省份切片器选择的省份名称,赋值给在”各省交叉销售地图“工作表中B2单元格。
Step2:交叉销售=INDEX(省市交叉销售!B:B,MATCH(各省交叉销售地图!B2,省市交叉销售!A:A,0))
Step:3:在”各省交叉销售地图“工作表中随便插入一张图片,调好尺寸。将其设置为”=交叉销售“,即完成了通过名称动态引用图片的操作。
步骤四:编写VBA代码实现从省到市的钻取功能:
将该宏赋给“转到各省交叉销售地图“宏按钮即可。
这里的关键在于:
1)通过省份名称筛选出来的各城市XY坐标,会通过VBA程序,粘贴到各省射线图和各省气泡图的指定位置(C5:E30区域),继而以同样的方法按省拼合出交叉销售流向地图。最终实现通过宏按钮从省到市的下钻效果。
2)因为这里需要计算省外的数值,但在生成省市射线图和气泡图的时候,不同的省份,“省外”位置是不固定的。这里通过G5单元格记录每个省份城市个数,也就可以知道上一次“省外”所在的位置。
m = Sheets("各省射线图").Range("G5").Value Sheets("各省气泡图").Cells(m 5, 6) = "=IF(G4,0,iferror(index(城市交叉!A194:MF194,match(各省气泡图!J4,城市交叉!A1:MF1,0))-sum(F5:F" & m 4 & "),0))" Sheets("各省气泡图").Cells(m 5, 7) = "=IF(Q6=F4,0,iferror(index(城市交叉!MF1:MF194,match(各省气泡图!J4,城市交叉!A1:
这样便可以计算出下表中,省外的倾入倾出数值,并将其显示在下表中。
3)在切换省份后,城市清单表有更新,故需更新其透视表以及其切片器。
Sheets("各省射线图").PivotTables("数据透视表1").PivotCache.Refresh ActiveWorkbook.SlicerCaches("切片器_城市").PivotTables(1).PivotCache.Refresh
至此,大功告成。