如何可视化数百个类别的倾斜数据? 我一直在尝试一种新的图表形式,可以帮助解决这个问题。 我称之为“拥挤的酒吧”。它是有序条形图和树形图的综合。 以下是包含最新 S&P 500 市值数据的堆积条形图。

蓝色“主”条和轴形成一个规则的有序条形图,显示市值最大的 12 家公司。 每个灰色“辅助”条代表其他公司之一。 如果空间允许,可以对一些辅助栏进行标记,但它们的主要目的是为主要栏提供上下文。 这个想法是为了支持焦点+背景数据可视化原理。
我们可以粗略地了解二级类别有多少个,它们的总大小是多少,甚至大小是如何分布的。 由于它们与主条的比例相同,我们甚至可以根据它们在轴上跨越的长度来估计一些值。 在动态显示中,可以通过悬停标签访问二级类别的类别标签和值。
右边缘并不总是那么均匀,但通过从左到右首先放置较大的辅助条,通常效果很好。
例子
有时,这些值是如此倾斜,以致于辅助填充不会超过主要条形。 按名义国内生产总值绘制世界经济图表时就是这种情况。 该条形图突出显示了 192 个世界经济体中排名前七的经济体。 (与G7 , 顺便一提)。

仅选择四个主要类别突显了这样一个事实:美国经济约占世界名义 GDP 的四分之一。

如果次要类别的总和与主要条形的比例相同,则可以将它们打包到单独的条形中,如下所示。

经济学并不是扭曲数据的唯一来源。 以下是尼卡地平药物试验数据的副作用计数。

条形的大小代表出现的次数,颜色代表平均严重程度。 次要颜色仍然会褪色,以保持主要类别的焦点,但如果更真实的颜色表示很重要,则不必这样做。
让我走上这条道路的数据集是纽约市注册的狗名的集合。 这是我的创作,突出显示了 16,000 多个名字中的前 25 个名字。

与其他打包条形示例不同,次要类别按字母顺序并逐行放置,以支持查找特定的狗名称(借助悬停标签)。 这种布置的缺点是右边缘明显不太均匀。
拥有真正的 x 轴(与树形图不同)的一个优点是能够估计整个总体的总和。 在本例中,我们有 25 行,每行在计数轴上的数量刚好超过 4,000。 我们可以估计狗的数量为 25 x 4,000+ = 100,000+。
尼卡地平示例显示了条形图使用连续色标。 使用分类着色,褪色不太可能使颜色解释复杂化。 在狗名字的视图中,我使用橙色来表示以“y”音结尾的名字。

变化
我一直在尝试各种变化,上面的例子展示了其中的许多变化。 在构建打包条形图时,我们可以选择以下选项:
有多少行? 有没有一个好的通用默认值? 像 10 这样的整数可以很容易地应用乘法技巧来获得总和,但纵横比可能更重要。
按大小从左到右放置辅助栏还是按字母顺序逐行放置? 按大小从左到右意味着每个辅助条的左边缘位置对应于按大小排序顺序,无论行如何。 条形越大,距离左侧越远。 从某种意义上说,这与按尺寸排序的主条是一致的,并且具有更干净的右边缘的优点。 将相似的大小放在一起可能有助于理解分布。 逐行字母顺序对于在交互式显示中查找特定类别更有用。 辅助栏按字母顺序从左到右放置之内每行,从顶行开始。
辅助条的颜色? 我一直在尝试随机灰色、褪色和真实颜色。 随机化灰色使得分隔线变得不必要(避免连续重复的灰色)。
主条的标签? 将标签放在图表区域之外的轴上可以避免在条形图内拟合的约束。 但将主要标签放在条形内有助于将其与堆叠条形图区分开来,并且更节省空间。
二级钢筋的标签? 我最初不喜欢使用辅助标签来强调它们语境角色,但拥有一些标签似乎对不太确定发生了什么的新观众有很大帮助。
次要钢筋的单独堆栈? 当数据如此倾斜以至于所有辅助值的总和与主条形的比例相同时,“其他”堆栈是可行的。
将所有或部分次要条合并到一个实体“其他”区域? 这将保留大部分上下文,使右边缘平滑,并使显示噪音更少。 但它放弃了一些有关次要大小的基数和分布的信息。
备择方案
与可视化具有多个类别的倾斜数据的其他方法相比,填充条形图如何?
- 相比于条形图对于顶级类别,打包条形图获得其余类别的上下文。 主要缺点是辅助条形图使图表变大(或主条形图缩小)并占用可用于标签或注释的空间。
- 相比树形图,打包条形通常具有更准确的数据表示(轴上的条形长度与没有任何轴的区域的长度),但更大的优势是查看主要类别,这些类别具有突出的标签和轴对齐的尺寸。 但是,树形图支持嵌套和真正的空间填充(无锯齿状右边缘)。 微小的值可能会在树状图中得到更好的表示,因为 3x4 像素的矩形比 1x12 像素的条更容易看到。 虽然堆积条中的轴带来了准确性,但它们确实占用了空间,从而使树形图更加节省空间。
- 相比堆积的气泡(如在原始狗的名字气泡图),压缩条具有更规则的扫描位置,并且在表示数据值时长度相对于圆形区域具有感知优势。 然而,与树形图一样,微小的值可能更容易被识别为气泡(4 像素直径的圆圈与 1x12 像素的条形图)。
- 相比于一维散点图,包装条为主要类别和累积总和的意义添加突出的、对齐的标签。 散点图的优点是对所有值使用精确的位置编码,并保持大小通道可用于另一个变量;但过度打击必须通过抖动或闪避来应对,这对于非常倾斜的数据可能会出现问题。
- 相比包裹条,将条形重新组织为多列,打包条形更节省空间,这有助于支持更多类别(1,000 个而不是 100 个),并且打包条形增加了总面积的感觉。 包裹条支持更准确的读取“次要”条形图的值,因为它们的基数是对齐的,并且包裹的条形图应该具有较低的学习曲线,因为它们看起来更像常规条形图。
缺点
对拥挤的酒吧的主要批评是类似于堆叠条,这使人们相信每一行中的条形彼此相关。 我将堆栈之间的间隙设置得比堆叠条形图的典型间隙小,试图减少潜在的混乱,但我不确定它是否可以消除。 我希望优势能够克服障碍。
其他缺点主要是权衡,可以通过上面列出的选项中的选择来解决。 例如,如果随机灰色看起来太分散注意力,则可以以其他方式对辅助条进行着色或将其合并在一起作为有意的简化。
带注释的指南
下一张照片不适合你;它是为那些浏览帖子只看图片的人准备的。

在 JMP 中尝试一下
尽管这项工作仍处于实验阶段,但我附加了一个 JSL 脚本,用于创建打包条形图的最简单变体联合管理计划。 它的工作原理是首先将打包逻辑应用于数据,创建合成行号和颜色变量。 然后,它在图形生成器中创建一个常规的堆叠条形图,并具有打包条形图的颜色和排列。
你怎么认为?
我认为打包条对于某些类型的数据很有用,但我意识到我太投入而无法客观。 因此,我正在寻找有关此工作各个方面的反馈:布局、术语、标签、颜色等。如果您有可能从此显示中受益的数据,请告诉我 – 我可以使用我的原型为您尝试一下。我去过发推文更多例子;如果你有兴趣,请查看狗的性别名称和产品伤害计数。 如果您想尝试在其他图表平台上创建打包条形图,那也很棒。
谢谢参观!
2017 年 8 月更新:除了附加的 JMP 脚本之外,现在还有一个 Excel 插件和一个 d3.js 脚本用于制作打包条形图。 他们可以在PackedBars github 区域。 该插件是通过与 Excel dataviz 专家合作完成的,乔恩·珀尔帖。 一张拥挤的酒吧海报已被接受IEEE视觉系统十月份的会议。 海报提交需要25秒预览视频;附上带有字幕而不是音频的动画 GIF 版本。
谢谢,马克。 说到帕累托,我最近制作了一个动画 gif,随着值数量的增长,比较了压缩条形图和帕累托图。

西安:
看起来你的想法已经被 Kaiser Fung 延伸到了条形密度图。
这些条很容易解释。 打包多边形允许显示打包条形图上的一小条区域。 不知道我是否对条形密度图感兴趣......
ps 我使用包装条来分析和展示上个月上面的秘密内容。 比标准帕累托效果好得多!
很高兴听到,马克——谢谢! 感谢您使用真实数据进行尝试。 很高兴您了解帕累托应用程序和按需详细信息方面。
如果你有任何我可以使用的匿名“秘密东西”,请传递给我——有实际的例子总是好的。
顺便说一句,我一直在推特上发布一系列图表。
遗憾的是,您无法轻松控制 JMP 13 中的条形间距。 如果您确实想要获得效果,可以使用一些技巧,但否则脚本只能近似填充条形的外观。
西安:
凉爽的! 我运行了几次,发现它是帕累托图的一个很好的替代方案。 我从事制造改进工作。 我们经常使用前 10 名图表来帮助推动我们做正确的事情。 使用当前的 Pareto 平台,必须使用组合最后 (n-10) 个原因才能查看前 10 个原因。 (n-10) 个原因的细节被掩盖了。 拥挤的条形图为我提供了一个很好的帕累托图,其中包含树形图所需的详细信息。

如何控制条形宽度/间距? 我的条形图之间有垂直间距。
通过这篇文章,我得到了一系列有趣的反应:)
我最初的反应是“这并不是什么新鲜事,我们一直在做……哦,等等,不,那是不同的……”连续几次。
我认为这种技术对于大型有序数据集具有很大的潜力。 在我看来,它确实存在的任何缺点都是树形图中固有的,并且该技术改进了这些缺点。
我认为一开始出现混乱的可能性很大。 在某些情况下,让观众理解它与树形图之间的区别,或者它与堆叠条形图之间的区别可能是一个挑战。
但我认为这是非常值得探索的,而且我“非常”宁愿以这种格式绘制我的数据,而不是标准的树形图。
干得好。