朋友不会让朋友制作糟糕的图表
朋友不会让朋友制作某些类型的数据可视化 - 它们是什么以及为什么不好。
- 作者:李晨欣博士,佐治亚大学作物与土壤科学系和应用遗传技术中心助理研究科学家。
- 联系方式:Chenxin.Li@uga.edu | @ChenxinLi2
这是一篇关于数据可视化好坏实践的主观文章。 以下是示例和解释。
Scripts/
目录包含生成下面所示图形的.Rmd
文件。
它需要R、RStudio和rmarkdown包。
目录
- 朋友不会让朋友为均值分离制作条形图
- 朋友不会让朋友为小样本量制作小提琴图
- 朋友不会让朋友为单向数据使用双向色标
- 朋友不会让朋友制作条形图草原
- 朋友不会让朋友在不重新排序行和列的情况下制作热图
- 朋友不会让朋友在不检查异常值的情况下制作热图
- 朋友不会让朋友忘记检查每个因素水平的数据范围
- 朋友不会让朋友在不尝试不同布局的情况下制作网络图
- 朋友不会让朋友混淆基于位置和长度的可视化
- 朋友不会让朋友制作饼图
- 朋友不会让朋友制作同心圆环图
- 朋友不会让朋友使用红/绿和彩虹色标
- 朋友不会让朋友忘记重新排序堆叠条形图
- 朋友不会让朋友混合堆叠条形图和均值分离
1. 朋友不会让朋友为均值分离制作条形图
这必须是第一个。 均值分离图在科学出版物中是最常见的。 我们有两个或更多组,每组包含多个观察值;它们可能有不同的均值、方差和分布。 可视化的任务是显示数据的均值和分散程度。
在这个例子中,两组有相似的均值和标准差,但分布却很不同。它们真的"相同"吗? 只是不要为均值分离使用条形图,或者至少在决定使用条形图之前检查一些事项。
值得一提的是,我受到了许多在推特上谈论条形图局限性的研究人员的启发。 这里有一篇出版物:Weissgerber等人,2015年,PLOS Biology。
2. 朋友不会让朋友为小样本量制作小提琴图
这在文献中也很常见,但不幸的是,小提琴图(或任何种类的平滑分布曲线)对于小样本量没有意义。
即使底层观察值相似,小样本量的分布和四分位数也可能差异很大。 分布和四分位数只有在大样本量时才有意义。 我之前做过一个实验,多次从同一个正态分布中抽样,并计算每个样本的四分位数。 只有当n大于50时,四分位数才趋于稳定。
3. 朋友不会让朋友为单向数据使用双向色标
请原谅我的用词,但这确实是数据可视化的罪过,而且同样很常见。 我能理解为什么这个错误很普遍,因为似乎我们中的许多人并没有花太多心思思考这个问题。
色标很漂亮,但我们必须格外小心。 当色标(或颜色渐变)用于表示数值数据时,最深和最浅的颜色应该有特殊含义。 你可以决定这些特殊含义是什么:例如,最大值、最小值、平均值、零。但它们应该代表有意义的东西。 热图/颜色渐变的数据可视化罪过是最浅或最深的颜色代表某些任意数字。 *这和条形图中最长的条不是最大值一样糟糕。*你能想象吗?
4. 朋友不会让朋友制作条形图草原
我们讨论过不要为均值分离制作条形图,但这是一个不同的问题。 它与呈现多因素实验结果有关。 条形图草原在科学出版物中非常常见,但不幸的是在传达结果方面也效果不佳。
数据来源:Matand等人,2020年,BMC Plant Biology
条形图草原很常见,因为多因素实验很常见。 然而,条形图草原的设计不适合其目的。 要传达多因素实验的结果,需要仔细考虑如何按感兴趣的因素进行分组/分面。 在这个例子中,我着重比较了在每个"品种"水平上"处理"和"外植体"对"响应"的影响。 然而,如果关注点是在每个"外植体"水平上"处理"和"品种"对"响应"的影响,那么就需要不同的布局。
5. 朋友不会让朋友制作热图时不(考虑)重新排序行和列
热图在科学出版物中非常常见,在组学论文中更是极其普遍。 然而,要使热图有效,我们必须考虑行和列的排序。
在这个例子中,我将细胞作为列,特征作为行。网格显示的是z分数。 如果不重新排序行和列,就不可能从热图中获得任何有用的信息。 我们可以使用聚类来重新排序行和列,但这不是唯一的方法。 当然,如果行和列映射到物理实体(96孔板的行和列),那么就不能重新排序它们。 但至少考虑重新排序行和列是一个很好的想法。
额外内容:热图可以非常美观
...如果你善于重新排序行/列并选择颜色渐变。 这里是一个使用模拟数据生成的"抽象艺术"示例。
这幅艺术作品的R代码可以在这里找到。
关于如何重新排序热图的行和列的教程,请参见此Markdown文件。
6. 朋友不会让朋友制作热图时不检查异常值
热图中的异常值真的会改变我们对可视化的感知和解释。 这一点适用于所有使用颜色表示数值数据的可视化方式。 让我给你举个例子:
在这个例子中,我有2个观察值。对于每个观察值,我测量了20个特征。 如果不检查异常值,可能会觉得这两个观察值总体上是相似的,只是在2个特征上有差异。 然而,在将颜色刻度限制在数据的95百分位左右后,就显示出这两个观察值在所有特征上都是不同的。
7. 朋友不会让朋友忘记检查每个因子水平的数据范围
这是我们许多人都遇到过的常见问题。 在多因素实验中,有时响应变量的范围在不同因子水平之间变化很大。
这个假设的实验测量了2个组(对照组vs.处理组)中的3种化合物。 如果不检查每种化合物的数据范围,你很可能会错过处理对化合物1有强烈影响这一点。 这是因为在这个实验中,化合物1的浓度范围比其他化合物要窄得多。
8. 朋友不会让朋友制作网络图时不尝试不同的布局
网络图在科学出版物中很常见。它们在展示关系数据方面非常有用。 然而,网络的外观(而非拓扑结构)可能会对网络图的有效性产生巨大影响。
布局可以极大地改变网络的外观,使它们更容易或更难理解。 这里有3个来自同一数据的网络图。它们看起来非常不同。 数据来源:Li et al., 2022, BioRxiv
这里是同一网络的9种不同布局。它们看起来可以非常不同。
制作这个动画的R脚本可在这里找到
9. 朋友不会让朋友混淆基于位置的可视化和基于长度的可视化
这总是房间里的大象,也是许多误导性可视化的本质。 在这个例子中,我测量了3个时间点的响应变量。 以下三个图中有两个是没问题的,但其中一个是数据可视化的罪行。你能看出为什么吗?
在点图和线图中,值由x轴和y轴上的位置表示。 同样的理念也适用于其他基于位置的可视化,如箱线图。 在条形图中,值由距离x轴的距离表示,因此是条形的长度。
第3个图不是从0开始的,这使得时间点2的条形长度约为时间点1的3倍。 事实上,真实的平均值差异更接近1.6倍。 我希望你能看出混淆长度和基于位置的可视化如何导致误导性的图表。
注意带有断轴的条形图
断轴可能对描绘跨越широ范围数值的数据有用。 (或者,可以使用对数刻度轴代替。) 对于基于位置的图形来说,断轴是可以的,因为数据是由轴上的位置表示的。 然而,我们必须非常小心带有断轴的条形图。这里有一个例子。
在这个例子中,两个图(左vs.右)显示的是相同的数据。 然而,通过改变轴的断点位置,可以使某些条形看起来更长或更短。 在这个例子中,条形"d"的长度可能看起来非常不同。 右图中条形"d"看起来很短的错觉归根结底是因为条形图是基于长度的图形,而不是基于位置的图形。
断轴的示例R代码可以在这里找到。
10. 朋友不会让朋友制作饼图
饼图是分数数据的常见可视化类型,其中分数加起来等于100%。 这是通过将一个圆分成扇形来实现的,扇形加起来构成一个完整的圆。 饼图受到批评,因为人类在读取角度和面积方面比读取长度要差得多。 这里有一篇博客文章探讨了这一点。
在这个例子中,我们有两组,每组包含4个子类别。 在经典饼图中,角度(因此也包括弧长和扇形面积)代表数据。 问题是很难在组间进行比较。 我们可以将饼图简化为环形图,数据现在由弧长表示。 然而,如果我们想用长度来表示数据,为什么不直接展开环形图,制作堆叠条形图呢? 在堆叠条形图中,条形并排显示,因此更容易在组间进行比较。
有趣的事实:堆叠条形图的底层脚本比饼图和环形图的底层脚本简单得多。 如果你想用ggplot制作次优的图表类型,实际上你需要付出更多努力。
11. 朋友不让朋友制作同心环形图
在这个例子中,我们有3个组,每个组包含两个子类别(I型或II型)。
在同心环形图中,你可能会认为数据由弧长表示,但这实际上是不准确的。 外环的弧长比内环的弧长长得多。 第2组和第3组的数值完全相同,但第3组的弧长要长得多。 事实上,数据是由弧角表示的,而我们不擅长读取弧角。
由于外环更长,组的排序(哪个组在哪个环上)对图表的印象有很大影响。 这可能导致一个明显的悖论,即较大的值反而有较短的弧。 更好(且更简单!)的替代方案是展开环形图,制作一个传统的堆叠条形图。 顺便说一下,这也是我对circos图和其他圆形布局图表的主要问题。
12. 朋友不让朋友使用红/绿和彩虹色标
绿色弱是最常见的红/绿色盲类型,在男性中发生率为1/16,在女性中为1/256。 任何同时使用红色和绿色阴影的色标对红/绿色盲的人来说都是一个问题(图中第三列)。 此外,红/绿和彩虹色标在黑白打印时(灰度,图中第二列)完全无法保留信息。 许多科学软件仍然使用红/绿或彩虹作为默认色标,这让我很恼火。 更"现代"的色标,如viridis既适合色盲,又适合灰度打印(图中第三行)。 而且它们看起来也很不错。
13. 朋友不让朋友忘记重新排序堆叠条形图
堆叠条形图对于可视化比例数据很有用。 堆叠条形图常用于可视化群落结构、种群结构或混合分析。 这种可视化归结为一组样本,每个样本包含多个类别的成员。 然而,当我们有很多样本和类别时,堆叠条形图需要优化才能有效。 这里的"优化"指的是样本的分组和排序。
这里我们有一个包含100个样本和8个成员类别的示例数据。 由于样本和类别的数量众多,如果不优化条形的顺序,很难从这个图中看出任何东西。我到底在看什么? 重新排序条形后,哇,这真的产生了很大的差异,你不觉得吗? 关于如何优化堆叠条形图的教程,请参阅这个脚本。
14. 朋友不让朋友混合使用堆叠条形图和均值分离图
有时,当可视化试图同时实现太多目标时,会变得混乱和无效。 一个这样的例子是混合使用堆叠条形图和均值分离图。 一个显示总和为100%的比例数据,另一个显示均值之间的差异和均值周围的离散程度。 这些在数据可视化中是非常不同的任务。
在这个假设的实验中,我们将蓝莓植株分为两组。 一组是对照组;另一组用化学药品处理以加快果实发育。 每组有5株植物。 处理的反应分为3类: 浅绿色果实、浅蓝色果实和深蓝色果实。 对每株植物的100个果实进行检查,并计算每类果实的数量。 计算并报告了每类果实的百分比。 研究的问题是:化学处理是否有效?
第一个堆叠条形图作为可视化比例数据的标准方式是没问题的。 很明显,所有类别加起来等于100%, 化学处理强烈地将颜色分布转向了最发达的阶段(深蓝色)。
中间的堆叠条形图存在问题, 主要是因为它试图同时完成两个不同的数据可视化任务。 当误差线和点叠加在堆叠条形上时, 变得不清楚哪些误差线和点在进行比较。 由于堆叠条形的性质,上部堆叠的误差线和点必须向上移动, 因此对于误差线和点来说,y轴的解释变得不直观。
最后,如果可视化的主要目的是均值分离和均值周围的离散程度, 第三个图是更好的选择。 对于正在进行的比较没有任何歧义。 如第一个堆叠条形图所示, 化学处理显著增加了深蓝色果实的比例, 同时减少了浅色果实的比例。
结论(?)
暂时就这些。当我有时间(和灵感)制作更多例子时,我会更新这个内容。 不确定下一个会是什么,但请继续关注!