美文网首页
给树状图加上热力填色反映第2指标

给树状图加上热力填色反映第2指标

作者: 刘万祥ExcelPro | 来源:发表于2017-03-20 09:46 被阅读0次

    读者留言希望能讲讲 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重优惠,多买多送包邮!抓住机会请立即点击【阅读原文】。

    相关文章

      网友评论

          本文标题:给树状图加上热力填色反映第2指标

          本文链接:https://www.haomeiwen.com/subject/vyjbnttx.html