要选最基本的图形,大概非条形图莫属,它的普及性、简洁、直观都是有目共睹。本文介绍条形图的使用场景、如何基于业务的需求扩展深度。

1、条形图的历史

很多人认为William Playfair (circa 1780)发明了条形图,不过早在14世纪,就有名为Nicole Oresme的法国人使用条形图描述了“latitude of forms”,展示了物体移动时随着时间的速度;这甚至比我们熟知的牛顿还要早三百年。

Nicole Oresme - Early bar graphs

到18世纪末,William Playfair 绘制了苏格兰的进出口情况,即便在现在看来,也是条形图中的高级图形了——借助条形图展示两个度量的同比例对比关系。

William Playfair bar chart - Exports and Imports of Scotland

2、条形图的分析价值

条形图最基本的特征是“条形bar”,它用来代表一个绝对值数字,与此对应的是一个分类的标题,比如区域、类别等,我们称之为离散的分类字段。可见,离散字段与连续度量,是条形图bar chart的最基本构成要素。

条形图用于以绝对值字段对离散分类字段的比较,因此通常以排序sort做调整,比如说“各个类别的销售额总和”,完整的意思是“按照销售额为排序依据,对各个类别做排序,从而查看孰高孰低”,英文表述中有特别的连接词可以对应“sort category by total sales”。

每一种图形都有它的主视图空间构成要素,分别是行字段、列字段和图形样式。对于条形图而言,普遍用横轴X代表度量坐标轴,而用纵轴Y代表离散的排序字段(离散字段才是问题本身),标记的类型就是条形图。

  • 为什么不是excel中普遍出现的柱状图? 因为人的眼睛对长度更加敏感,而非对高度;同时横置的字段名称更加易读。
  • 凡事必有例外:当维度是日期时,日期代表先后,普遍放在横轴上,此时就是典型的柱状图场景。

当然,极端的条形图只有一根,此时的离散字段可以理解为最高的聚合维度,比如:总公司的销售额。不过,如果只有一个数据,也就没有比较的意义,更简单的方式是直接用一个文本来展现。

所以是,文本是体现最高聚合的首选,特别是同事体现多个数据值尤其如此。使用Tableau时,可以直接使用智能推荐,这里使用了“度量名称”的高级功能。

3、条形图的基本延伸形式

最基本的条形图是由离散字段+连续度量两个部分构成的,排序作为调整。

根据分析的需要,还需要进一步做修饰和调整,扩展的方式有几种:扩展离散的分类字段(维度)、增加度量。(样本的变化通常不会对图形引起本质的变化,所以不在视图主题中阐述。)

3.1增加维度

增加维度分为具有层次关系的维度和没有层次关系的维度,前者称之为分层结构或者钻取分析,后者称之为矩阵分析或者样本控制。

3.1.1 增加分层结构及合计

比如在上面“各个类别的销售额总和”基础上,领导想进一步查看“各个类别下、各个子类别的销售额总和”,同时还要随时切换回之前的视图。也就是说,需要在两个具有上次层次关系的层次“类别”和“类别*子类别”之间切换。

最简单的方式是创建“分层结构”,通过把子类别字段拖曳到类别字段之上创建“分层结构”,事先指明类别、子类别之间的关系,之后就可以在视图中通过点击展开和折叠字段了。

很多习惯了excel交叉表的人习惯性地试图在上图中增加“合计”,从而在“类别*子类别”的条形图中,增加“类别”的合计。Tableau并不建议如此,这也是excel默认有合计,而Tableau默认无的原因。为什么?因为Tableau用坐标轴对应的长度代表销售额,合计会破坏视图,破坏子类别相互之间比较的直观性。

说明:如何使用更高层次的合计

如果一定要增加类别的销售额,要清楚这个聚合值和当前视图的关系如何,加入它的目的又是如何?如果是为了展示合计的排名,可以折叠到上一阶;如果是为了计算展示,可以通过标签增加占比%,而无需显示合计本身;如果为了把合计作为辅助要素,可以加入“工具提示”,使用时能得到、平时藏于无形就好了。这样的思路逻辑,应该贯穿在整个可视化分析过程中,从而确保视角的焦点不被“次优先”甚至“不重要的背景信息”所干扰。

3.1.2 增加矩阵字段

通常,在条形图中增加一个无关字段的目的是构建进一步的二级排序,或者构建筛选样本。

比如,在“各类别销售额”基础上,增加细分市场字段,就可以查看“各类别的销售额,在不同细分市场的表现”,后者的表现可以进一步排名。

通常不会吧无关字段和之前的字段并列排放,因为二者无层次关系,而是构建如下的条形图矩阵(bar chart matrix)。这样,问题的分析层次就改变了,这样的图形让视图变得复杂,通常结合排序、展示和其他字段增强效果。

多个离散维度构成的矩阵,就有了很多中排序的可能性,可以仅仅针对子类别排序、可以仅仅针对类别排序、可以针对类别和子类别做嵌套排序、可以在每个细分市场中做度量排名。

由于这样的矩阵略显复杂,如果每次只给某个特定的细分市场负责人查看,那么可以把细分通过筛选器做切片(在细分字段上右键“显示筛选器”),这样似乎就回到了之前的视图中。也可以结合上述合计的逻辑增加占比、工具提示。

将维度筛选器更改为切面

在增加维度字段时,有一个特别重要的是日期,离散的日期与上面的细分无异;不过由于日期具有连续性,如果是连续的日期,视图就会出现全新的坐标轴,视图就会有明显的变化-——这就是甘特图的来源。甘特图把原来均以零点为起点的条形图,调整到对应的时间轴上,只是改变了条形图的起点,没有改变条形图的本质。

不过,既然甘特图的坐标轴是日期,通常条形图的长度也要有日期相关,否则视图的意义就会失真。因此甘特图用于做日期长度有关的比较,特别项目进展、发货时长等等。

Joseph Priestley (England, 1733-1804)曾经用类似的思路勾画很多名人的人生轨迹,如下所示。如果要用Tableau展示,只需要人名(离散字段)、出生日期和逝世日期(出生日期作为起点、两个日期计算间隔)。

比如用超市数据,分析不同省份的发货间隔,间隔就是条形图排序的依据(这里使用了datediff函数),订单日期就是每个条形图的起点,省份则是视图中的分类字段。为了进一步区别发货时长,还可以以“发货间隔超过4天”作为颜色标记。如下所示。

增加维度时,维度决定详细级别,因此要特别注意视图层次的变化,理解字段之间的相互关系,特别是引用更高层次聚合时特别注意。

3.2 增加度量

增加度量的变化远远超过增加维度,因为度量具有进一步的特征,比如绝对值vs比率、全部大于0 VS 具有正负值等。

视图中假设是销售额,利润和利润率都可以作为背景信息。不过利润是绝对值;利润率是比率。绝对值和比率的展现差异明显——通常用大小代表绝对值,而用点代表比率(因为比率并没有一个从0到35%的这种连续性意义,而仅仅是一个最终的属性)。

即便是销售额和利润,二者在展示时也有很大不同;销售额通常是正值(没有人赔钱卖东西),不过利润却经常出现负数。可视化表述必须考虑二者的这种差异,具有负数的数据需要的不仅仅是一个坐标轴,更重要的是一个大于0或者小于0的分类,或者与0的关系,此时颜色几乎是最佳选择。连续的颜色,相当于把数据放在了一个坐标轴上再着色。

颜色可以非常明显地突出正负值的强烈对比

条形图代表数字本身,这里的销售额和利润均为此理;不过,由于销售额没有负值,对应的颜色轴可以理解为从0一直向右的单色系;而由于利润的合计可能是负值,对应的颜色就有了两侧强烈的对比感

如果再从视图角度,考虑度量与视图的关系,就有了更多的调整思路。

3.2.1 新增字段的作用与如何根据业务需要体现二者关系

首先要判断,新增加的字段是作为与此前度量相同重要的字段存在,还是仅仅作为一个背景数据。或者说,这个字段与已有聚合字段的关系如何。这种关系决定了把新增字段放置的位置:是用一个坐标轴给它留出关键空间,还是用颜色作为已有字段的关键补充,还是仅仅放在标签是看到数据而无需对比,甚至放在工具提示中作为更低层的背景数据(不需要第一眼就看到它)。

比如在“各个子类别的销售额”条形图中,我们视图让领导通过看到利润贡献的情况。分析服务于目的,有几种可能的情形:

  • 为了说明那些销售很多的子类别,反而是公司盈利能力的拖累,就必须把利润放在与销售额几乎平等的位置上。最明显的方式是直接为利润的合计绘制一个坐标轴,与销售额平起平坐。为了突出,可以同时增加颜色标记,就如上图所示了。
  • 如果只是为了告诉领导说部分子类别的销售贡献虽好,利润其实很差,而无需把利润的数据本身以坐标轴如此显要的方式体现出来,那就可以把它的颜色直接放在销售额上。如下:
  • 虽然上面能一看看出桌子和美术的利润出了问题,却不能对比子类别的盈利能力。剔除掉不盈利的子类别,如果领导说,他更关心“边际利润”,而非“绝对利润”,此时的图形就不行了,需要做增加近一步的字段。销售量多,利润自然多,但并非边际利润多;衡量能力的指标通常都是比率,而非绝对值,最典型的就是“利润率”。如何在上面体现利润率?很明显不能增加颜色,也不能仅仅增加标签,颜色有助于对比正负,却不容易对比4%和5%,最佳的方式是为利润率分配一个单独的坐标轴。如下。

这样销售额和利润足够突出,利润率也足够明显。不过,如果我们想近一步做利润率的分类,比如大于平均利润率的子类别和小于平均利润率的子类别,就需要进一步使用形状和颜色去做分类了。这里需要使用高级计算引用更高层次的聚合值——表计算或者LOD计算。

3.2.2 新增字段作为隐形的背景数据

在上面,新增加的字段都是作为显性的字段出现在视图中的,区别在于根据业务分析的优先级调整位置,并结合形状、颜色进一步增加分辨。

还有一种形式,领导需要更多的数据作为判断的依据,但是并非以显性的方式直接出现,而是以隐形的方式作为参考——决策需要时我能找到它,但是默认无需争夺视觉的注意力。

比如在上面的视图中,为了进一步说明利润率的下降是由什么原因造成的,可以增加近一步的说明,不过又不能破坏当前视图的焦点。所以可以把更多诠释的信息放在“工具提示”中,以交互的方式才能获得。当然,如果业务场景足够复杂,应该用仪表板的方式,分工作表近一步展开。

负利润是由过度的折扣造成的吗? 可以把每个子类别的平均折扣放在视图的工具提示中。桌子的平均折扣确实高于其他类别,是否这种折扣是普惠性质的,面向所有人,还是少数人?这就需要进一步深入到客户的层次中。简单的结构性分析,可以通过工具提示来完成。如下所示,在原来的视图中增加“平均折扣”,以及客户的折扣和销售额分布。

用这种互动的方式我们很快就会发现,桌子的平均折扣39%,而且很多客户的折扣高于50%。而纸张则完全没有折扣。

3.2.3 新增加的字段作为对比依据

更加高级的场景下,新增加的度量字段要和原有的度量字段构成对比关系。这又分为不同的情形。

3.2.3.1 并列对比的关系,或者具有包含的关系

比如在销售额基础上,增加毛利额、利润等其他的聚合数据,他们具有一定的层次关系。那么就要使用共同的坐标轴来把它们放在共同的空间中,如何构建一个不依赖于任意度量字段的坐标轴?这就是Tableau“度量值”的魅力。只需要把第二个坐标轴拖入到第一个坐标轴上,就会构建度量值的公共轴心。同时出现“度量名称”作为二者的分辨,为了增强分辨,可以以颜色标识之。如下图。

如果仅仅是两个度量值,这样地布局并非直观,还可以通过度量名称重叠简化图形,并进一步增强对比效果。

使用度量值构建的两个轴合并(默认合并)

对于很多人来说,用度量值控制大小实属不易。两个坐标轴最容易控制地方法是使用“双轴图”,借助于两个独立地轴可以更好地定制每个轴地颜色和大小。甚至于可以为每个坐标轴设置透明度、描边等,特别是作为底色的销售额要选择暗色系的颜色,也可以索性直接改为完全不透明加个黑色描边。

使用双轴图合并两个坐标轴,可以更加精细控制

反观度量名称和度量值,通常用于多个度量的关系。比如在《数据可视化分析》一书中,介绍这个高级功能时,我使用这个功能,用来同时展示冠状病毒分析的多个指标。

图 5 56 拖拽度量合并为度量的并排柱状图

如果在这个问题上更进一步,多个度量同时还要体现它们的先后关系,比如利润的构成等,就是瀑布图了。

3.2.3.2 对比的关系,强调对比的结果,而非新度量字段

最典型的应用就是在销售额的基础上,要为领导展示“每个区域的销售额达成”,注意关注达成的进度,而非达成值本身。如何表达关系,而非把注意力错误地引导到数字上? 最佳图形就是建立在参考线基础上地标靶图(或称之子弹图)。

图 5 97 使用数据混合为标靶图准备数据

上面地数据用标靶图展示,如下所示。销售目标不是视觉重点,但销售额和销售目标地关系才是,借助于参考线及条形图与参考线地关系,可以清晰地描述销售额地完成情况——是否穿过参考线。为了进一步增强分辨,可以借助颜色增加分类,完成地标记为蓝色,未完成标记为黄色。

图 5 99 为标靶图增加颜色分类标识

标靶图不仅仅是参考线,其实在参考线背后还有一个分布区间——参考线地60%和80%分别用深色和浅色阴影体现。借助于计算,颜色也可以用多个颜色标记——不及格、及格、良好和达成。

大家会发现,这个逻辑,和此前讲解折线图的逻辑如出一辙,只是把分析过程与业务的思考结合起来。所以,逻辑是相同的,不同的是业务场景与每个人的关注点。

by喜乐君

Dec 3, 2020
Dec 4, 2020 update