中心发散颜色为零

问题描述 投票:0回答:1

我想绘制以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()

我知道了

enter image description here

它并没有真正遵循-4到1.5的范围,我还如何增加间隔,尤其是突出显示更正的值。

python python-3.x matplotlib colorbar
1个回答
0
投票

尝试将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()

给出此图:

enter image description here

根据您的情况,尝试设置minzz = -4maxzz = 4

© www.soinside.com 2019 - 2024. All rights reserved.