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

标签 python matplotlib plot colors 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')

最佳答案

另一个答案让它变得比需要的更复杂一些。为了使颜色图的中点为 0,请使用 DivergingNormvcenter=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()

enter image description here

注意:从 matplotlib 3.2 开始,DivergingNorm 将重命名为 TwoSlopeNorm

关于python - 如何在不均匀的色带处将 0 设置为白色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59638155/

相关文章:

python - 使用 pipelinenv 添加 python 项目

python - 关于艺术家在 matplotlib 层次结构中的位置的困惑

Python:改进逐 block 代码以读取数百万点的建议

python - 更改 Seaborn 散点图中的图例位置和标签

R:使用通用图例比例分别绘制和保存光栅砖层

python - 如何使用 macports 进行全新安装?

python - 在 if-else 语句中使用 in range(..)

python - pygame 中仍然没有检测到碰撞

python - matplotlib 的自定义箭头样式,pyplot.annotate

apache-spark - 如何在 Apache Spark (PySpark 1.4.1) 中可视化/绘制决策树?