给树状图加上热力填色反映第2指标
读者留言希望能讲讲 Office 2016 里新增加的图表类型。
2016版本里新增了几个图表类型,以往难以实现的图表,如瀑布图、树状图、热力地图等,现在都可以一键完成,这个值得肯定。其他旭日图、漏斗图、直方图、箱形图等,则意义不是很大。
今天这帖我们说说树状图,以及如何给树状图加上热力填色反映第2指标。
树状图,英文名 treemap,但图里其实根本看不到树,我倒是觉得翻译为板块图更形象,因为我们看到的是一个个有层级包含关系的矩形板块。
要插入一个treemap,选中你的数据源,插入 树状图 即可,这没有什么好说的。默认的填充颜色是按当前颜色面板填充的,这并没有意义,可统一设置为纯色。
不过,正如前面的例图,我们看到的 treemap 图多数情况下还会叠加一个指标,即把指标的增长率映射到板块的填充色上,表现为热力填色的树状图。Excel的树状图并没有这个功能,怎么能够实现呢?
作图思路
根据我们在《用地图说话》里的经验,可以利用宏来批量设置各板块的填充色。填充色可以按指标分档设置,也可以使用条件格式来产生,我们这里使用后者的方法。
数据准备
直接使用原数据即可。
作图步骤
1、以B、C两列数据插入树状图。
2、对D列数据设置条件格式 - 色阶,得到热力填色效果。
3、由于vba无法读取色阶的颜色,需要先转换为固定色。复制D列数据区域,鼠标定位到E7,点击剪贴板功能组右下角的小箭头,打开剪贴板,双击最新的粘贴项目,则D列复制到E列,且色阶变成固定色,现在即使删除E列的数据,其填充色也不会变化。
4、编写并运行以下的宏代码,树状图就被热力填色了。
Sub fill_color()
ActiveSheet.ChartObjects("图表 1").Activate
For i = 1 To ActiveChart.FullSeriesCollection(1).Points.Count
'对板块填色
ActiveChart.FullSeriesCollection(1).Points(i).Select
Selection.Format.Fill.ForeColor.RGB = Range("Sheet1!E" & i + 6).Interior.Color
Next
End Sub
图表分析
现在得到如下的热力填色树状图,可以看到,板块面积大小及其排序反映GDP规模大小,颜色深浅反映GDP增长率大小。
这种热力填色的树状图和热力填色的数据地图比起来,避免了某些省份面积很大但GDP规模很小带来的视觉误导,便于分析决策抓住重点,抓住大头。
Treemap可以反映规模,但没有数据地图的位置信息,下面的热力地图一眼看出东北地区经济增速坍塌的问题,不过又没法看出GDP规模了。所以两种图各有适用场景。
那么,有没有方式可以同时反映 规模+增速+位置 3个属性?那就是热力气泡数据地图,气泡大小代表GDP规模,颜色代表增速,气泡位置当然就是省份了。具体做法本例不做介绍,可参考《用地图说话》一书。
多层类目的情况
树状图更多用来显示具有层级包含关系的数据,这个时候如果要对各板块填充颜色,使用前面的方法会遇到问题。如果简单地按前面方法填充,结果发现填色与数据没有正确对应,而是错误的。
经反复检查调试后发现,原因是图表里一级类目也会占用一个 points(id)。那怎么办?我们可以根据大类和细类的不重复个数,计算出每个细类在图表中对应的 points(id),然后填充颜色。
图中,
H列,计算大类个数,H7:={SUM(1/COUNTIF($B$7:B7,$B$7:B7))},使用数组公式和锁头不锁尾方式,下拉到底。这个公式很有技巧,常用于统计不重复个数,可以记下来。
I列,计算细类对应的 point(id),I7:={SUM(1/COUNTIF($C$7:C7,$C$7:C7))+H7},还是数组公式,锁头不锁尾,下拉到底。
下面,按I列的id去选中图表里的points(id),填充G列的底色,宏代码如下:
Sub fill_color2()
ActiveSheet.ChartObjects("图表 1").Activate
For i = 1 To 18 ' 注意这里直接按所在行数循环,跳过了大类的数据点
'对板块填色
ActiveChart.FullSeriesCollection(1).Points(Range("I" & i + 6)).Select
Selection.Format.Fill.ForeColor.RGB = Range("G" & i + 6).Interior.Color
Next
End Sub
得到如下的多层级热力填充树状图。
涉及知识点
树状图,需要2016版本
条件格式,色阶
剪贴板粘贴方式,色阶转固定色
简单的宏录制与改写
不重复计数技巧,={SUM(1/COUNTIF($B$7:B7,$B$7:B7))},数组公式,混合地址
轴标签数据源,自定义格式,text,char(13),贴中未讲解
范例下载
实用指数:★★★★
难度指数:★★★
范例下载方式:在微信公众号 iamExcelPro 发送消息 “treemap”,获得下载链接。我们近期会在学员QQ群里视频直播讲解演示。
如何加入学员QQ群?点击【阅读原文】,参加任一图表课程即可加入QQ学习社群,和大家一起交流学习,通过 所属组合 参加课程还有组合优惠。
PS:网易云课堂春季大促最后2天,Excel商业图表与数据可视化系列课程【折扣+用券+送书】3重优惠,多买多送包邮!抓住机会请立即点击【阅读原文】。