在 matplotlib 中更改 cmap 转换点

Change cmap transition points in matplotlib

有没有办法在 matplotlib 中更改连续颜色图 (cmap) 的过渡值?我想使用“vlag”为热图着色,但我的值通常只在 0 到 0.6 之间(而不是 0-1)。我可以重新规范化我的数据或使用 vmin 和 vmax,但是我很好奇是否有办法将 vlag 的转换点设置在 0-1 之间。 vlag 中有三种颜色(蓝色、白色和红色)。设置过渡点将允许在不同的热图之间进行同类比较。

如果颜色图仅包含少量颜色,BoundaryNorm 可让您指定过渡点。

对于具有平滑颜色范围的颜色图,TwoSlopeNorm 可让您移动开始发生过渡的点。

from matplotlib.colors import TwoSlopeNorm
import seaborn as sns  # for the 'vlag' colormap
import numpy as np

x = np.linspace(0, 10, 200)
y = np.sin(x)**2

fig, axs = plt.subplots(ncols=2, figsize=(12, 4))
scat0 = axs[0].scatter(x, y, c=y, cmap='vlag')
axs[0].set_title('default norm')
plt.colorbar(scat0, ax=axs[0])

norm = TwoSlopeNorm(vmin=0., vcenter=0.3, vmax=1)
scat1 = axs[1].scatter(x, y, c=y, cmap='vlag', norm=norm)
axs[1].set_title('TwoSlopeNorm')
plt.colorbar(scat1, ax=axs[1])

plt.tight_layout()
plt.show()