首先,有不止一种方法可以做到这一点。
- 将
DivergingNorm 的实例作为norm kwarg 传递。
- 使用
colors kwarg 到contourf 并手动指定颜色
- 使用由
matplotlib.colors.from_levels_and_colors 构造的离散颜色图。
最简单的方法是第一个选项。它也是唯一允许您使用连续颜色图的选项。
使用第一个或第三个选项的原因是它们适用于使用颜色图的任何类型的 matplotlib 图(例如imshow、scatter 等)。
第三个选项从特定颜色构造离散的颜色图和规范化对象。它与第二个选项基本相同,但它将 a) 与等值线图以外的其他类型的图一起使用,并且 b) 避免手动指定等值线的数量。
作为第一个选项的示例(我将在此处使用imshow,因为它比contourf 更适合随机数据,但contourf 的用法与interpolation 选项不同。):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import DivergingNorm
data = np.random.random((10,10))
data = 10 * (data - 0.8)
fig, ax = plt.subplots()
im = ax.imshow(data, norm=DivergingNorm(0), cmap=plt.cm.seismic, interpolation='none')
fig.colorbar(im)
plt.show()
作为第三个选项的示例(请注意,这给出了离散的颜色图而不是连续的颜色图):
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import from_levels_and_colors
data = np.random.random((10,10))
data = 10 * (data - 0.8)
num_levels = 20
vmin, vmax = data.min(), data.max()
midpoint = 0
levels = np.linspace(vmin, vmax, num_levels)
midp = np.mean(np.c_[levels[:-1], levels[1:]], axis=1)
vals = np.interp(midp, [vmin, midpoint, vmax], [0, 0.5, 1])
colors = plt.cm.seismic(vals)
cmap, norm = from_levels_and_colors(levels, colors)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=cmap, norm=norm, interpolation='none')
fig.colorbar(im)
plt.show()