默认颜色更改#
正如在其他地方 [插入链接] 详细讨论的那样,jet
从经验上讲,这是一个糟糕的颜色图,不应该是默认颜色图。由于改变情节的外观破坏了向后兼容性的立场,这种改变被推迟了比它应该的时间更长的时间。除了更改默认颜色图外,我们还计划借此机会更改绘图上的默认颜色循环,并为填充图(imshow
、
pcolor
、contourf
等)和散点图采用不同的颜色图。
默认热图颜色图#
新颜色图的选择是自行车脱落的沃土(“不,它应该是_这个_颜色”),所以我们有一个提议的设定标准(通过 Nathaniel Smith)来评估提议的颜色图。
它应该是一个连续的颜色图,因为发散的颜色图确实会产生误导,除非您知道数据的“中心”在哪里,而对于默认颜色图,我们通常不会。
它应该在感知上是一致的,即人类对附近颜色相距多远的主观判断应该尽可能线性地对应于它们所代表的数值之间的差异,至少是局部的。
它应该有一个感知上均匀的亮度斜坡,即如果你转换为灰度,它应该仍然是均匀的。这在实际方面很有用(灰度打印机仍然是一个东西!),因为亮度是一个非常强烈和自然的量级提示。
它还应该有某种色调变化,因为色调变化是一种非常有用的额外感知提示,有两个提示比一个要好,没有理由不这样做。
即使对于更常见的色盲类型的观众,也应选择色调变化以产生合理的结果。(这排除了红到绿之类的东西。)
对于加分,如果您放弃亮度变化,最好选择一个仍然有效的色调渐变,因为这样我们可以将具有不同亮度的版本用于 2d 绘图,而使用仅色调变化的版本用于 3d 绘图。(在 3d 图中,您真的想为照明/阴影保留亮度通道,因为您的大脑非常擅长从亮度变化中提取 3d 形状。如果 3d 表面本身具有大量变化的亮度,那么这会破坏查看形状的能力。 )
不侵犯任何现有 IP
示例脚本#
建议的颜色图#
默认散点图#
对于类似热图的应用程序,可能希望覆盖尽可能多的亮度比例,但是在对标记进行颜色映射时,标记太接近白色可能是个问题。出于这个原因,我们建议对基于标记的热图使用不同(但可能相关)的颜色图。设计参数与上述相同,只是亮度变化更有限。
示例脚本#
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1234)
fig, (ax1, ax2) = plt.subplots(1, 2)
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radiuses
ax1.scatter(x, y, s=area, c=colors, alpha=0.5)
X,Y = np.meshgrid(np.arange(0, 2*np.pi, .2),
np.arange(0, 2*np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
Q = ax2.quiver(X, Y, U, V, units='width')
qd = np.random.rand(np.prod(X.shape))
Q.set_array(qd)
建议的颜色图#
颜色循环/定性颜色图#
绘制线条时,通常需要绘制需要区分的多条线条或艺术家,但没有固有的顺序。
示例脚本#
import numpy as np
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2)
x = np.linspace(0, 1, 10)
for j in range(10):
ax1.plot(x, x * j)
th = np.linspace(0, 2*np.pi, 1024)
for j in np.linspace(0, np.pi, 10):
ax2.plot(th, np.sin(th + j))
ax2.set_xlim(0, 2*np.pi)