默认色图会改变读者看到的东西
查看原文 00:28色图把每个数值映射为一种颜色,让一片数字中的结构变得可见。但这个映射也是数据与读者之间的接口:如果颜色变化在视觉上不均匀,它就可能突出一些边界,而这些边界并不对应同等重要的数据变化。在 SciPy 2015 上,Nathaniel Smith 介绍了他与 Stéfan van der Walt 的工作,主张用围绕人类感知设计的色图替换 Matplotlib 的默认色图 Jet。
Smith 介绍了一项针对心脏病影像诊断工具的用户研究:据他描述,与比较中较好的色图相比,习惯使用 Jet 的医生用时约为两倍,诊断错误也更多。他推测这样的默认设置可能害过人。这是讲者的猜测,不是演讲中证明 Jet 导致死亡的证据;演讲也没有确立临床结局。幻灯片将该研究标为 Borkin 等人(2011)。从 00:58 观看。
Smith 认为 MATLAB 当时较新采用的 Parula 比 Jet 好得多,但表示他们无法使用它。于是团队决定自行设计一种可开放使用的替代方案。
通用默认色图需要有序且易辨的变化
查看原文 02:42选择默认值时,设计者还不知道用户的数据是什么。Smith 提出的起始标准是:色图应色彩丰富、足够美观,让人愿意使用;应当是顺序色图、感知变化一致;也应适合黑白呈现,并尽可能照顾更多读者。顺序色图表示从低到高的有序变化;数据每变化相同的量,视觉上也应大致变化相同的程度。
这并不意味着顺序色图适合所有任务。发散色图可以强调数值在某个有意义中心两侧的偏离;循环色图可以连接重复量的两端。这些选择都对数据结构有所假设,而通用默认值无法预先知道这些结构。从 02:42 观看。
光谱经过压缩才成为视觉信号
查看原文 04:00要为感知而设计,可以沿着这条链条理解:数据变成 RGB 数值,显示器发出光,视网膜作出反应,大脑再产生视觉体验。Smith 把它作为一个有用的模型,并不声称它完整解释了视觉。
大多数光是许多波长的混合,可以用各波长所含光量组成的光谱来描述。接近单一波长的激光则是较简单的例子。在演讲的简化模型中,分别对长、中、短波长敏感的三类视锥细胞,把高维输入转成三个信号。不同光谱可能产生相同的三组反应,因此它们之间的差别会在这一表示中消失。
XYZ 同时解释光的混合与显示器的限制
查看原文 05:56CIE XYZ 为三维颜色匹配空间提供坐标:在上述简化模型中,一个点可以代表产生等效反应的多种光谱。由于真实光谱不可能在某个波长上含有负数的光,数学空间中只有一部分可以实现。Smith 展示了这个锥形区域的一个切面,以解释常见的彩色形状。
光的混合在这个映射中是线性的:红光与绿光的混合落在两点之间,并可能呈现黄色。显示器也以类似方式混合三种基色。它们能够组成的颜色构成显示器的色域;超出色域的路径无法直接按预期显示。编码后的显示信号与发光量之间是非线性关系,这与人类感知本身的非线性是两回事。从 05:56 观看。
感知空间在具体环境中估计颜色外观
查看原文 09:06无障碍设计需要检查多种观看方式
查看原文 12:11Smith 解释说,常见的色觉差异可能使长波与中波视锥细胞的反应更加相似,或者使其中一种缺失。在他的简化示意中,这会压缩红绿轴上的许多差异。因此,如果色图只依靠这些差异传达信息,一些读者就可能更难看懂。
团队的工具提供了几种色觉状况的近似模拟和灰度视图。这些模拟是设计辅助,并非对每个人视觉体验的精确复现。灰度也是一项独立需求:图表打印后,即使色相消失,读者仍应能辨认有序变化。从 12:11 观看。
比较色图时要看感知变化的速度
查看原文 13:11循环数据需要另一条颜色路径
查看原文 14:32同一套工具也可以反过来使用:先在感知坐标中选择路径,再将其转换为显示颜色。Smith 设计循环色图时,固定明度,在另外两个维度组成的平面上画圆。路径终点与起点相接,正好适合 0° 和 360° 附近彼此相邻的方向数据。
在风向示例中,相邻颜色有助于看出方向变化和可能的风切变。关键是让色图符合数据结构:循环变量适合闭合路径,而结构未知的有序变量更适合以顺序色图作为起点。从 14:32 观看。
贝塞尔控制点把约束变成候选色图
查看原文 15:08Viridis 来自多个候选方案和加入绿色的建议
查看原文 16:40团队最初制作了三个候选方案,并在 Matplotlib 邮件列表上征求意见。Smith 开玩笑说,快速设计色图反而让选择更困难:每个人都可能对“自行车棚应该刷什么颜色”发表意见。后来 Eric Firing 建议加入绿色。随后出现了另一个候选方案,团队又对其作了调整;字幕没有明确说明该方案的设计者。Smith 笑称,他们最初遗漏的标准就是必须有绿色。
最终提出的方案叫 Viridis。Smith 表示,与 Parula 相比,它的明度变化更大、色相变化更小,而且团队的模型避开了他指出的折弯。加入绿色的建议和他的偏好体现了技术约束之内的审美选择,并不是说所有色图都必须包含绿色。从 16:40 观看。
发布安排是 2015 年的历史计划
查看原文 17:56演讲时,Smith 表示团队计划在下一个版本中提供这些候选色图,并希望为 Matplotlib 2.0 选出新的默认值;当时预计该版本将在几个月后发布。他还邀请听众参加次日关于默认设置的讨论。这些都是 SciPy 2015 当时的计划和表述,本文不据此断言后续实际发布情况或当前默认值。
实践中的要点是根据数据和受众选择色图:检查它在感知空间中的变化、查看灰度与模拟视图、尊重显示器色域,并在数据需要时选用循环或发散色图。默认值只是起点,值得像其他任何界面一样接受检验。