Python “我该怎么做?”;夹;matplotlib色条?

Python “我该怎么做?”;夹;matplotlib色条?,python,matplotlib,Python,Matplotlib,假设我有一个数据集,具有不同的正值和负值(比如包含海平面以上地形和海平面以下水深的数字地形图)。正值远远超过负值。如果我想用例如matplotlib.pcolormesh来绘制数据,我可以用vmin和vmax来指定范围。为了使色条正确居中于零,我需要设置vmin=-vmax。然而,这使得大部分色条未使用。例如,请参见下面的最小示例: import matplotlib.pyplot as plt import numpy as np # Independent variables x = 2

假设我有一个数据集,具有不同的正值和负值(比如包含海平面以上地形和海平面以下水深的数字地形图)。正值远远超过负值。如果我想用例如
matplotlib.pcolormesh
来绘制数据,我可以用
vmin
vmax
来指定范围。为了使色条正确居中于零,我需要设置
vmin=-vmax
。然而,这使得大部分色条未使用。例如,请参见下面的最小示例:

import matplotlib.pyplot as plt
import numpy as np

# Independent variables
x = 2 * np.pi * np.linspace(0, 1, 1000)
y = x
X, Y = np.meshgrid(x, x)

# Dependent variable
Z = np.sin(X) + 0.25 * Y

# Draw canvas
fig, axes = plt.subplots(ncols=2, figsize=(9, 4), constrained_layout=True)

ax = axes[0]
ax.set_title("vmin at Z.min()")
CS = ax.pcolormesh(x, y, Z, cmap="RdBu_r", shading="auto", vmin=Z.min(), vmax=Z.max())
fig.colorbar(CS, ax=ax)

ax = axes[1]
ax.set_title("Correct colourbar midpoint")
CS = ax.pcolormesh(x, y, Z, cmap="RdBu_r", shading="auto", vmin=-Z.max(), vmax=Z.max())
fig.colorbar(CS, ax=ax)

plt.show()


正如您在右侧面板中所看到的,当我将色条的中点固定为零时,将不使用-1到-2.5的色条范围,我想放弃此选项。如何“剪裁”介于-1和2.5之间的色条,使其正确居中于零?

TwoSlopeNorm with vcenter=0@JohanC这是否会扭曲颜色贴图的一侧(即压缩蓝色)?如果我理解正确,您希望隐藏颜色栏的深蓝色部分(并保留正确的图像)?似乎解决了这个问题。而且@JohanC这确实解决了我的问题