# 饼图 - Pie Chart
饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表。在饼图中,每个扇形的弧长(以及圆心角和面积)大小,表示该种类占总体的比例,且这些扇形合在一起刚好是一个完全的圆形。
饼图最显著的功能在于表现“占比”。习惯上,人们也用饼图来比较扇形的大小,从而获得对数据的认知。但是,由于人类对“角度”的感知力并不如“长度”,在需要准确的表达数值(尤其是当数值接近、或数值很多)时,饼图常常不能胜任,建议用柱状图代替。
从数据来看,饼图一般需要一个分类数据字段、一个连续数据字段。值得注意的是,分类字段的数据,在图表使用的语境下,应当构成一个整体(例如一班、二班、三班,构成了整个高一年级),而不能是独立、无关的。
使用时,须确认各个扇形的数据加起来等于100%;避免扇区超过5个,尽量让图表简洁明了;注意扇形的排布顺序,一般情况下,将最大的扇形放在12点钟方向,接下来按面积依次排列;最后,正确使用颜色,既区分出需要强调的扇形,又不致于让人眼花缭乱。
# 平行坐标系 - Parallel Coordinates
平行坐标系,是一种含有多个垂直平行坐标轴的统计图表。每个垂直坐标轴表示一个字段,每个字段又用刻度来标明范围。这样,一个多维的数据可以很容易的在每一条轴上找到“落点”,从而连接起来,形成一条折线。随着数据增多,折线堆叠,分析者则有可能从中发现特性和规律,比如发现数据之间的聚类关系。
大约在一百多年前,就已经有人运用平行坐标,来对复杂事件做可视化。在20世纪70年代,作为一种统计图表,平行坐标系被特拉维夫大学的Alfred Inselberg系统发展起来。尽管一开始饱受争议——批评者认为这种图表太过凌乱,但平行坐标系在处理多维数据上的优势,仍然是其他统计图难以比拟的。尤其是,当平行坐标系配合交互功能使用时,其价值就会立刻显现。英文中将平行坐标系的交互称为“Brushing”,即“刷子”的意思。基本操作是,用户可以在每一根垂直坐标轴上“刷”出自己想要的范围,处于范围内的折线高亮,其余的呈灰度。这样一来,我们既可以看到所有折线堆叠出来的整体景观,又可以自由订制想看的范围,可以说是“见树又见林”。
尽管表面上类似折线图,但平行坐标系并不表示趋势,各个坐标轴之间也没有因果关系。因此,使用平行坐标系时,如何确定轴的顺序,是可以人为决定的。一般来说,顺序会影响阅读的感知和判断。两根坐标轴隔得越近,人们对二者的对比就感知的越强烈。因此,要得出最合适、美观的排序方式,往往需要经过多次的试验和比较。反过来讲,尝试不同的排布方式,也可能有助于得出更多的结论。
此外,平行坐标系的每个坐标轴,很可能有不同的数据范围,这一点很容易造成读者误解。作图时,最好显著的标明每一根轴上的最小值、最大值。
# 旭日图 - Sunburst Chart
旭日图是一种表现层级数据的图表。它以父子层次结构来显示数据,并构成一个同心圆,因此又被成为称为多层饼图。离原点越近,数据的层级越高。换句话说,相邻的两层,内层是外层的“父”。同时,一个“父”可以有多个“子”——即某一个环形又可以被分割成多个环形。环形的弧度由它在“父”层中所占比例来决定。若无占比关系,则处理成均分。
旭日图的本质是树状关系,与树图是等价的,因此也被称为极坐标下的矩形树图。它可以在承载大量数据的同时,清晰的显示数据间的结构关系。在许多工具中,旭日图被赋予交互功能,方便读图者自行探索。如支持鼠标悬浮高亮、筛选、显示当前层级等等。
圆形图表在设计上有着天然的优势,除旭日图外,还出现了径向热量图、径向直方图、径向折线图等图表类型,它们可视为是基于直角坐标系的径向变形(相当于把直角坐标卷起来),在设计上都能达到炫酷的效果。不过,尽管外形相似,但这些图表各有不同的功能。使用时,需要特别注意这些图表之间的差异,选择适合的图表。
# 堆叠柱状图 - Stacked Bar Chart
堆叠柱状图(Stacked Column Chart),又称堆叠柱形图,是一种用来分解整体、比较各部分的图。与柱状图类似,堆叠柱状图常被用于比较不同类别的数值。而且,它的每一类数值内部,又被划分为多个子类别,这些子类别一般用不同的颜色来指代。
如果说柱状图可以帮助我们观察“总量”,那么堆叠柱状图则可以同时反映“总量”与“结构”,即,总量是多少?它又是由哪些部分构成的?进而,我们还可以探究哪一部分比例最大,以及每一部分的变动情况,等等。
但是,堆叠柱状图也有它的劣势。例如,在堆叠的情况下,构成柱子的各部分并不处于同一水平线上,它们之间相互错落,很难比较大小(尤其是在数值比较接近的时候)。这种情况下,采用分组柱状图可能是更好的选择(所有柱子都处于同一水平线)。此外,随着类别或数据系列的添加,堆叠柱状图会变得复杂,妨碍其可读性。
# 折线图 - Line Chart
折线图是是一个由笛卡尔坐标系(直角坐标系),一些点和线组成的统计图表,常用来表示数值随连续时间间隔或有序类别的变化。在折线图中,x轴通常用作连续时间间隔或有序类别(比如阶段1,阶段2,阶段3)。y轴用于量化的数据,如果为负值则绘制于y轴下方。连线用于连接两个相邻的数据点。
折线图用于分析事物随时间或有序类别而变化的趋势。如果有多组数据,则用于分析多组数据随时间变化或有序类别的相互作用和影响。折线的方向表示正/负变化。折线的斜率表示变化的程度。
从数据上来说,折线图需要一个连续时间字段或一个分类字段和至少一个连续数据字段。
# 桑基图 - Sankey Diagram
桑基图 (Sankey Diagram),是一种表现流程的示意图,用于描述一组值到另一组值的流向。分支的宽度对应了数据流量的大小。
1869年,查尔斯米纳德(Charles Minard)绘制了1812年拿破仑征俄图(Map of Napolean's Russian Campaign of 1812,见设计案例1),描绘了拿破仑大军在东进时,兵力是如何一步步削弱的。这也是目前公认较早的桑基图。
如今,也出现了更加现代意义上的桑基图,有时也被称为“冲积图”(Alluvial diagram)。这种图包含流入、流出的节点,以及曲线型的边,往往呈现出彩带一般的效果。其一大特点在于“能量守恒”,即起始流量和结束流量相同。不能在中间过程中创造出流量,流失的流量也不应莫名消失(可以流向表示损耗的节点)。也因为流出等于流入,桑基图的每条边,宽度应是保持不变的。
使用桑基图时,应注意变量的归类和颜色的选择,避免太过花哨、影响阅读。必要时建议加入交互功能。
# 树图 - Treemap
树图,或者矩形树图,是一个由不同大小的嵌套式矩形来显示树状结构数据的统计图表。在矩形树图中,父子层级由矩形的嵌套表示。在同一层级中,所有矩形依次无间隙排布,他们的面积之和代表了整体的大小。单个矩形面积由其在同一层级的占比决定。
在布局上,一般来说同级别的分类块,占比大的会偏向于左上角。而在每个块里,子分类块的切割顺序,一般是先竖着切一刀,再横着切,再竖着切,以此类推。当然,这只是一种常见的布局方式,还可以选择其他很多种布局逻辑,详见维基百科。
相比树形结构图、径向树图,矩形树图虽然在“层级”的表示上没有那么直观、明确,却能有效利用空间来展示“占比”,具有节点大小的易读性。不过,矩形树图也有一些不适用的场景。例如,当各个子节点分布特别均匀的时候,很难通过视觉突出重点;当子节点占比太小的时候,文本排版也很困难。
从数据的角度来看,矩形树图需要树形结构 ( 至少有一个父级节点 )数据,且子节点需要有权重(比如子节点1占父节点的20%,子节点2占父节点的80%)。对于不带权重的树形结构数据,应用树形结构图或径向树图来表示。
# 气泡图 - Bubble Chart
气泡图是一种多变量的统计图表,由笛卡尔坐标系(直角坐标系)和大小不一的圆组成,可以看作是散点图的变形。在气泡图中,一般情况下,每一个气泡都代表着一组三个维度的数据(v1,v2,v3)。其中两个决定了气泡在笛卡尔坐标系中的位置(即x,y轴上的值),另外一个则通过气泡的大小来表示。例如,x轴表示产品销量,y轴表示产品利润,气泡大小代表产品市场份额百分比。
气泡图通常用于展示和比较数据之间的关系和分布,通过比较气泡位置和大小来分析数据维度之间的相关性。也可以用作研究两个变量与时间变量的关系。例如,著名的卫生学教授、统计学家Hans Rosling,曾用气泡图展示历史上世界各国人均收入、人口数量和寿命的关系(见场景案例1)。
# 柱状图 - Bar Chart
柱状图,是一种使用矩形条,对不同类别进行数值比较的统计图表。最基础的柱形图,需要一个分类变量和一个数值变量。在柱状图上,分类变量的每个实体都被表示为一个矩形(通俗讲即为“柱子”),而数值则决定了柱子的高度。
与“柱状图”相近的概念还有“条形图”,二者在实际使用中可能产生不同理解。例如,在AntV的分类中,条形图是柱状图的子集,专指“横向的柱状图”。而在Excel2016的图表功能中,柱状图专指纵向、条形图专指横向。
作为人们最常用的图表之一,柱状图也衍生出多种多样的图表形式。例如,将多个并列的类别聚类、形成一组,再在组与组之间进行比较,这种图表叫做“分组柱状图”或“簇状柱形图”。将类别拆分称多个子类别,形成“堆叠柱状图”。再如将柱形图与折线图结合起来,共同绘制在一张图上,俗称“双轴图”,等等。
不过,早已“飞入寻常百姓家”的柱状图,仍存在被误用的情况。一个典型代表就是篡改y轴,对读者视觉造成误导。在使用柱状图时,务必要使原点位于0。此外,注意对柱状图进行排序。依据可视化的目的、以及想突出的重点信息,确定合理的排序标准,避免柱状图看起来杂乱无章。
# 力导向图 - Force-Directed Graph
这种图表使用节点/顶点和连接线来显示事物之间的连接关系,并帮助阐明一组实体之间的关系类型。
每个顶点,或节点(node),代表一个对象。每条连线(link)代表所连接的两个对象之间的关系。比如,节点代表人,连线代表某两个人之间是否认识;节点代表投资机构或者创业公司,一条有方向的连线代表某投资机构投资了某创业公司;等等。
其中,节点的大小是可变的,可用来代表不同的变量。比如,用节点大小来表示人的年龄,或者人的朋友的数量,投资公司投资行为的数量,等等。而连线也可以用不同的颜色、粗细等来表示一些变量。但是,需要注意的是,在力导向图中,连线的长度、角度方向等是不能映射到变量上的。这是因为这些元素会影响图的“布局”,而在力导向图中,布局是被力导向算法限制住的。力导向图相对于笼统意义上的网络图,特点就在于这种确定的布局方式。它通过模拟物理上的节点间引力和斥力,来确定点之间的位置关系,然后再连上线。
# 弦图 - Chord Diagram
弦图,是一种表示实体之间相互关系的图形方法。直观的看,弦图由节点分段和弧形的边构成。节点分段沿圆周排列,节点之间的关系通过使用弧线或贝塞尔曲线相互连接。值得注意的是,这些弧线是有宽度的,且起止宽度可以不一样。这本质上是因为,弧线的宽度反映了一种矩阵关系(例如A[1,2]=3,A[2,1]=4),因此取值是双向的。
弦图所应用的这种表达方法,称为“分层的边缘捆绑”(hierarchical edge bundling),它可以在“多类别+复杂关系”的情况下,有效降低视觉复杂度。就场景而言,弦图最常被用来表现复杂的关系、以及数据的流动情况等。
对于弦图来说,交互往往是必要的。加入高亮、数据标签等功能,可以让读者更容易的阅读图表、进行自由探索。有时候,由于图表确实比较复杂,制图者也会选择制作故事线,一步步带领读者领会。
设计上,建议使用不同的颜色,将数据分组到不同的类别,有助于比较和区分。同时,注意用色的区分度,避免画面杂乱。对于弦的着色,可以自行设定标准,如采用颜色渐变,或者根据数值较大的那一方来着色。
在弦图布局上,一般建议使用符合最少重叠原则的布局。
# 漏斗图 - Funnel Chart
漏斗图,形如“漏斗”,用于单流程分析,在开始和结束之间由N个流程环节组成。漏斗图的起始总是100%,并在各个环节依次减少,每个环节用一个梯形来表示,整体形如漏斗。一般来说,所有梯形的高度应是一致的,这会有助人们辨别数值间的差异。
需要注意的是,漏斗图的各个环节,有逻辑上的顺序关系。同时,漏斗图的所有环节的流量都应该使用同一个度量。漏斗图最适宜用来呈现业务流程的推进情况,如用户的转化情况、订单的处理情况、招聘的录用情况等。通过漏斗图,可以较直观的看出流程中各部分的占比、发现流程中的问题,进而做出决策。
# 100%堆叠柱状图 - 100% Stacked Bar Chart
100%堆叠式柱状图是一种特殊的柱状图,它的每根柱子是等长的,总额为100%。柱子内部被分割为多个部分,高度由该部分占总体的百分比决定。因此,与普通的柱状图或堆叠柱状图不同,100%堆叠柱状图不显示数据的“绝对数值”,而是显示“相对比例”。但同时,它也仍然具有柱状图的固有功能,即“比较”——我们可以通过比较多个柱子的构成,分析数值之间的相对差异,或者得出数值变化的趋势。
但是,“堆叠”也有一定的弊端。例如,当数据系列过多时,堆叠可能会导致杂乱和花哨;堆叠时,同一系列的数据无法落在一条水平线上,无形中增加了对比的难度,尤其当数值接近时,人眼的辨别就更加困难。
# 热力图 - Heatmap
热力图,是一种通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示,等等。
从数据结构来划分,热力图一般分为两种。第一,表格型热力图,也称色块图。它需要2个分类字段+1个数值字段,分类字段确定x、y轴,将图表划分为规整的矩形块。数值字段决定了矩形块的颜色。第二,非表格型热力图,或曰平滑的热力图,它需要3个数值字段,可绘制在平行坐标系中(2个数值字段分别确定x、y轴,1个数值字段确定着色)。
热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。
值得注意的是,绘制热力图时,建议选择恰当的调色板,既在视觉上便于区分,也符合所要传达的主旨。
# 南丁格尔玫瑰图 - Nightingale Rose Chart
南丁格尔玫瑰图又名鸡冠花图、极坐标区域图,统计学家和医学改革家佛罗伦萨‧南丁格尔 (Florence Nightingale) 在克里米亚战争期间创造了这种图表,用以反映军医院的季节性死亡率(见场景案例1),促进了医院条件的改良。
尽管外形很像饼图,但本质上来说,南丁格尔玫瑰图更像在极坐标下绘制的柱状图或堆叠柱状图。只不过,它用半径来反映数值(而饼图是以扇形的弧度来表示数据的)。但是,由于半径和面积之间是平方的关系,视觉上,南丁格尔玫瑰图会将数据的比例夸大。因此,当我们追求数据的准确性时,玫瑰图不一定是个好的选择。但反过来说,当我们需要对比非常相近的数值时,适当的夸大会有助于分辨。
# 散点图 - Scatter plot
散点图,又名点图、散布图、X-Y图,英文Scatter plot或Scatter gram。
散点图是将所有的数据以点的形式展现在平面直角坐标系上的统计图表。它至少需要两个不同变量,一个沿x轴绘制,另一个沿y轴绘制。每个点在X、Y轴上都有一个确定的位置。众多的散点叠加后,有助于展示数据集的“整体景观”,从而帮助我们分析两个变量之间的相关性,或找出趋势和规律。此外,我们还可以添加附加的变量,来给散点分组、着色、确定透明度等等。
散点图常被用于分析变量之间的相关性。如果两个变量的散点看上去都在一条直线附近波动,则称变量之间是线性相关的;如果所有点看上去都在某条曲线(非直线)附近波动,则称此相关为非线形相关的;如果所有点在图中没有显示任何关系,则称变量间是不相关的。
如果散点图呈现出一个集中的大致趋势,这种趋势通常可以用一条光滑的曲线来近似,这样近似的过程被称为曲线拟合,而这条曲线则被称为最佳拟合线或趋势线。如果图中存在个别远离集中区域的数据点,这样的点被称为离群点或异常值。
不过,分析时需注意,相关性并不等于因果关系。例如,有统计表明,冰棒卖得越多,游泳死亡人数就越高。若是在散点图上,二者应当呈正相关,但实际上,两种现象都是由天气炎热引起的,并无直接因果关系。
# 雷达图 - Radar Chart
雷达图是一种显示多变量数据的图形方法。通常从同一中心点开始等角度间隔地射出三个以上的轴,每个轴代表一个定量变量,各轴上的点依次连接成线或几何图形。
雷达图可以用来在变量间进行对比,或者查看变量中有没有异常值。另外,多幅雷达图之间或者雷达图的多层数据线之间,还可以进行总体数值情况的对比。
轴的相对位置和角度通常是无信息的。每个变量都具有自己的轴,彼此间的距离相等,所有轴都有相同的刻度。在将数据映射到这些轴上时,需要注意预先对数值进行标准化处理,保证各个轴之间的数值比例能够做同级别的比较。
# 面积图 - Area Chart
面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,原理与折线图相似。而面积图的特点在于,折线与自变量坐标轴之间的区域,会由颜色或者纹理填充。
面积图也可用于多个系列数据的比较。这时,面积图的外观看上去类似层叠的山脉,在错落有致的外形下表达数据的总量和趋势。相较于折线图,面积图不仅可以清晰地反映出数据的趋势变化,也能够强调不同类别的数据间的差距对比。但它的劣势在于,填充会让形状互相遮盖,反而看不清变化。一种解决方法,是使用有透明度的颜色,来“让”出覆盖区域。
面积图还包含几种变形,如堆叠面积图、100%堆叠面积图等。
# 堆叠面积图 - Stacked Area Graph
堆叠面积图与面积图类似,都是在折线图的基础上,将折线与自变量坐标轴之间区域填充起来的统计图表,主要用于表示数值随时间的变化趋势。而堆叠面积图的特点在于,有多个数据系列,它们一层层的堆叠起来,每个数据系列的起始点是上一个数据系列的结束点。
堆叠面积图适合观察几个数据系列随时间的变化情况,既能看到各数据系列的走势,又能看到整体的规模。但是,过多的系列,也会导致难以分辨,这种情况下建议加入交互。此外,在使用堆叠面积图时,要特别注意它与堆叠柱状图的区别。当数据没有时间上的关联时,须使用堆叠柱状图。
# 直方图 - Histogram
直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。 一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。根据数据分布状况不同,直方图展示的数据有不同的模式,包括对称单峰、偏左单峰、偏右单峰、双峰、多峰以及对称多峰。
构建直方图,首先要确定“组距”、对数值的范围进行分区,通俗的说即是划定有几根柱子(例如0-100分,每隔20分划一个区间,共5个区间)。接着,对落在每个区间的数值进行频次计算(如落在80-100分的10人,60-80分的20人,以此类推)。 最后,绘制矩形,高度由频数决定。
值得一提的是,选择不同的“组距”,绘制出的图表也不同,也可能使我们得出不同的结论。为了避免片面的情况,建议多次调试组距。有时,人们也会把几个直方图叠在一起比较(如场景案例1),但类别最好不超过3个。
直方图与柱状图看似相像,实则完全不同。前者反映数据分布情况,后者则不具备此功能,只能对数值进行比较。从数据结构来说,柱状图需要1个分类变量,是离散的(如一班、二班、三班),因此柱子间有空隙。但直方图的数据均为连续的数值变量(如成绩),因此柱子间是没有空隙的。
# 六边形分箱图 - Hexagonal Binning
六边形分箱图(Hexagonal Binning),也称六边形箱体图,或简称六边形图,是一种由六边形为主要元素的统计图表。它是一种比较特殊的图表,既是散点图的延伸,又兼具直方图和热力图的特征。
一般来说,人们习惯用散点图来分析变量之间的关系,以及寻找趋势。但是,随着数据集越来越庞大,画面上的散点也越来越多。这时,数据点很可能会重叠在一起、互相覆盖,以至于很难分辨出趋势、发现集群。
因此,为了解决这个问题,我们可以引入“密度”的概念,即以特定的区域为单位,统计出这个区域里散点出现的频数,然后借鉴热力图,用颜色代表频数的高低。这样一来,散点的分布就一目了然了。为何要使用六边形来框定范围呢?这是因为,比起矩形,六边形更像一个圆,这样可以更有效的围绕着图形中心聚合数据。此外,六边形也方便衔接,排列起来也非常美观。
使用六边形分箱图,可以大幅降低散点图带来的视觉困难。尤其是在面对大规模数据集时,它就显得尤为高效。
# 箱形图 - Box plot
箱形图是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名。1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数及上下四分位数。
箱子的顶端和底端,分别代表上下四分位数。箱子中间的是中位数线,它将箱子一分为二。从箱子延伸出去的线条展现出了上下四分位数以外的数据,由于这两根延伸出去的线像是胡须,因此箱形图也被称为盒须图。有时,箱形图上也会出现个别的点,在胡须的末端值以外,这代表离群值,也可称之为异常值。箱形图是非参数的:它们显示统计总体样本的变化,而不对基础统计分布做任何假设。框的不同部分之间的间距表示数据中的分散程度(扩散)和偏斜,并显示异常值。
箱形图最大的优势是,它以一种简单的方式,概括出一个或多个数值变量的分布,同时又不会占据太多空间。通过箱形图,我们可以很快知道一些关键的统计值,如中位数、上下四分位数等;也可以分析是否存在离群值、离群值分别是多少;整体来看,还可以检验数据是否对称、是否有偏向性,如果有,它偏向于哪一边;最后,我们还可以用多个箱型图,比较多组数据的分布,从而快速获得对数据结构、数据质量的认知。
箱型图展示出了四分位数,通常盒子中间的一条线就是第二四分位数(中位数)。但是胡须的末端值(上边缘,下边缘)可以代表几种不同的值,其中包括:
(1)所有数据中的最大值和最小值;
(2)在[Q1-1.5IQR, Q3+1.5IQR]范围里的极小值和极大值 (通常被称为Tukey Boxplot);
(3)在平均数的基础上上下浮动一个标准差;
(4)第9百分位数,第91百分位数;
(5)第2百分位数,第98百分位数。
其中Tukey Boxplot的应用比较广泛,故本章将针对这一类型的 boxplot进行详细的描述。