我的色带不均匀,我希望 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')
最佳答案
另一个答案让它变得比需要的更复杂一些。为了使颜色图的中点为 0,请使用 DivergingNorm
和 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()
注意:从 matplotlib 3.2 开始,DivergingNorm
将重命名为 TwoSlopeNorm
关于python - 如何在不均匀的色带处将 0 设置为白色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59638155/