Python pcolor 和 colorbar 不使用整个颜色图

Python pcolor and colorbar dont use the whole colormap

当我尝试创建一个值介于 -2 和 10 之间的简单 pcolor 图时,默认 pcolor 和 colorbar 仅使用 -2 到 2 之间的颜色图,因此显示错误的颜色。

这是一个工作示例:

import numpy as np
from matplotlib import pyplot as plt

m = np.array([[ 0.9, 2., 2., 1.8],
              [ -0.8, 0.1, -0.6, -2],
              [ -0.1, -2, -2, -0.06],
              [ 3, 4, 7, 10]])

x = [0, 1, 2, 3]
y = [0, 1, 2, 3]
xv,yv = np.meshgrid(x,y)

fig = plt.figure()
ax = fig.add_subplot(111)
print m.min(),m.max()
cax = ax.pcolormesh(xv,yv,m, cmap='viridis')
cbar = fig.colorbar(cax)
plt.show()

我会包含一张图片,但在 Whosebug 上没有足够的声誉

这是你想要的结果吗?

import numpy as np
from matplotlib import pyplot as plt

m = np.array([[ 0.9, 2., 2., 1.8],
              [ -0.8, 0.1, -0.6, -2],
              [ -0.1, -2, -2, -0.06],
              [ 3, 4, 7, 10]])

x = [0, 1, 2, 3]
y = [0, 1, 2, 3]
xv,yv = np.meshgrid(x,y)

fig = plt.figure()
ax = fig.add_subplot(111)
print m.min(),m.max()
cax = ax.pcolormesh(xv,yv,m, cmap='viridis', vmin=-2, vmax=10)
cbar = fig.colorbar(cax)
plt.show()

您需要为 x 和 y 添加另一个值,因为它只绘制网格值之间范围内的值(绘制 0-1、1-2、2-3、3-4 的图像值), 像这样:

import numpy as np
from matplotlib import pyplot as plt

m = np.array([[ 0.9, 2., 2., 1.8],
              [ -0.8, 0.1, -0.6, -2],
              [ -0.1, -2, -2, -0.06],
              [ 3, 4, 7, 10]])

x = [0, 1, 2, 3, 4]  # added the 4
y = [0, 1, 2, 3, 4]  # added the 4
xv,yv = np.meshgrid(x,y)

fig = plt.figure()
ax = fig.add_subplot(111)
print m.min(),m.max()
cax = ax.pcolormesh(xv,yv,m, cmap='viridis')
cbar = fig.colorbar(cax)
plt.show()

您的示例仅使用每个维度的前 3 个值,因此整个范围是从 -2 到 2。通过再添加一个值,您可以使用整个矩阵。