如何在不均匀的色带处将 0 设置为白色

Reb*_*cca 4 python colors matplotlib colorbar matplotlib-basemap

我的色带不均匀,我希望 0 为白色。所有负色必须是蓝色的,所有正色必须是红色的。我当前尝试显示 0 偏蓝色和 0.7 白色。

有没有办法将0设置为白色?

import numpy as np
import matplotlib.colors as colors 
from matplotlib import pyplot as m

bounds_min = np.arange(-2, 0, 0.1)
bounds_max = np.arange(0, 4.1, 0.1)
bounds = np.concatenate((bounds_min, bounds_max), axis=None)       
norm = colors.BoundaryNorm(boundaries=bounds, ncolors=256)      # I found this on the internet and thought this would solve my problem. But it doesn't...
m.pcolormesh(xx, yy, interpolated_grid_values, norm=norm, cmap='RdBu_r')
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 6

另一个答案让它变得比需要的更复杂一些。为了使颜色图的中点位于 0,请使用DivergingNormwith vcenter=0

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import DivergingNorm

x, y = np.meshgrid(np.linspace(0,50,51), np.linspace(0,50,51))
z = np.linspace(-2,4,50*50).reshape(50,50)

norm = DivergingNorm(vmin=z.min(), vcenter=0, vmax=z.max())
pc = plt.pcolormesh(x,y,z, norm=norm, cmap="RdBu_r")
plt.colorbar(pc)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意:从 matplotlib 3.2 开始DivergingNorm将更名为TwoSlopeNorm