默认颜色更改¶
在其他地方详细讨论过 [插入链接] , jet
是经验错误的颜色映射,不应是默认颜色映射。由于改变绘图的外观会破坏向后兼容性,因此这种更改被推迟的时间比本应推迟的时间要长得多。除了更改默认颜色图外,我们还计划借此机会更改绘图上的默认颜色循环,并为填充的绘图采用不同的颜色图。 (imshow
, pcolor
, contourf
等)以及散点图。
默认热图颜色图¶
新颜色地图的选择是肥沃的地面到自行车脱落(“不,应该是 _this_ 因此,我们有一个建议的设置标准(通过Nathaniel Smith)来评估建议的颜色映射。
- 它应该是一个连续的颜色映射,因为如果不知道数据的“中心”在哪里,分散的颜色映射就真的会产生误导,而且对于默认的颜色映射,我们通常不会这样做。
- 它应该在知觉上是一致的,也就是说,人类对相邻颜色之间的距离的主观判断应该尽可能线性地对应于它们所代表的数值之间的差异,至少是局部差异。
- 它应该有一个知觉上均匀的亮度渐变,即,如果你转换为灰度,它仍然应该是均匀的。这在实践中都很有用(灰度打印机仍然是一回事!)因为亮度是一个非常强烈和自然的暗示。
- 它也应该有一些色调的变化,因为色调变化是一个真正有用的额外线索感知,有两个线索比一个更好,没有理由不这样做。
- 即使对于那些比较常见的色盲类型的观众,也应该选择色调变化来产生合理的效果。(排除了从红到绿的情况。)
- 对于奖励点,最好选择一个仍然有效的色调渐变,如果您放弃亮度变化,因为我们可以使用具有不同亮度的版本用于二维绘图,而仅具有色调变化的版本用于三维绘图。(在3D图中,你真的想保留亮度通道用于照明/着色,因为你的大脑 真正地 擅长从亮度变化中提取三维形状。如果3D表面本身的亮度变化很大,那么这会使查看形状的能力变差。)
- 不侵犯任何现有知识产权
示例脚本¶
建议的颜色图¶
默认散点颜色图¶
对于像热图一样的应用,希望尽可能多地覆盖亮度比例,但是当彩色映射标记时,标记太接近白色可能是一个问题。基于这个原因,我们建议使用一个不同的(但可能相关的)颜色图作为热图的标记。设计参数与上述相同,只是亮度变化有限。
示例脚本¶
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)