我想绘制以0为中心的发散色(红色表示正值,蓝色表示负值)。我尝试按照建议的here
以0作为中点标准化数据import matplotlib.colors as colors
import numpy as np
class MidpointNormalize(colors.Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
colors.Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
minzz = -4
maxzz = 1.5
plt.contourf(x, y, z, cmap='RdBu_r', norm=MidpointNormalize(midpoint=0), vmin=minzz, vmax=maxzz)
plt.xticks()
plt.colorbar()
我知道了
它并没有真正遵循-4到1.5的范围,我还如何增加间隔,尤其是突出显示更正的值。
尝试将maxzz
设置为等于minzz
的绝对值。检查此代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.linspace(0, 10, 1000)
X, Y = np.meshgrid(x, y)
Z = np.cos(X) * np.sin(Y)
plt.contourf(X,
Y,
Z,
cmap = 'RdBu_r',
vmin = -1,
vmax = 1)
plt.colorbar()
plt.show()
给出此图:
根据您的情况,尝试设置minzz = -4
和maxzz = 4