matplotlib pcolormesh四边形对齐

f1tvaqid  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(166)

documentationquadrilateral应该在左下角有X,Y坐标,但我得到的是以X,Y为中心点的坐标。我该如何修复它?所有东西似乎都上下移动了0.5。

import numpy as np
import matplotlib.pyplot as plt

X = np.arange(20)
Y = np.arange(11)
Z = [[11, 41, 77, 84, 45, 20, 9, 5, 2, 1, 1, 1, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
      [np.nan, np.nan, 1, 46, 109, 87, 49, 26, 14, 8, 5, 3, 2, 1, 1, 1, np.nan, np.nan, np.nan],
      [np.nan, np.nan, np.nan, 2, 45, 97, 82, 50, 28, 16, 10, 6, 4, 3, 2, 1, 1, 1, np.nan],
      [np.nan, np.nan, np.nan, np.nan, 7, 53, 76, 57, 34, 20, 11, 7, 4, 3, 2, 1, 1, 1, np.nan],
      [np.nan, np.nan, np.nan, np.nan, 1, 17, 47, 46, 30, 17, 10, 6, 3, 2, 1, 1, 1, np.nan, np.nan],
      [np.nan, np.nan, np.nan, np.nan, np.nan, 4, 21, 28, 20, 12, 6, 4, 2, 1, 1, 1, np.nan, np.nan, np.nan],
      [np.nan, np.nan, np.nan, np.nan, np.nan, 1, 7, 13, 11, 6, 3, 2, 1, 1, np.nan, np.nan, np.nan, np.nan, np.nan],
      [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2, 5, 5, 3, 1, 1, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
      [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 2, 2, 1, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
      [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]]

plt.figure()
plt.pcolormesh(X[1:], Y[1:], Z, cmap='jet')
plt.xlim([0, 1.5 * 8.3])
plt.ylim([0, 2 * 5])
plt.grid(True)
plt.colorbar()

plt.show()

这就是我得到的:

txu3uszq

txu3uszq1#

正如在评论中提到的,解决方案是改变你的路线:

plt.pcolormesh(X[1:], Y[1:], Z, cmap='jet')

plt.pcolormesh(X, Y, Z, cmap='jet')

也就是说,使用完整的XY数组,它们(由于比相应的Z维度大1)将定义bin边缘。
请注意,您可以将XY转换为2D数组,即,

X, Y = np.meshgrid(X, Y)
print(X.shape, Y.shape)
(11, 20) (11, 20)

并将它们传递给pcolormesh,尽管如果XY只是1D数组,则pcolormesh将在内部执行此操作。

3hvapo4f

3hvapo4f2#

如果你仔细阅读documentation,你会发现这个问题。当你没有提供shading参数时,它默认为"auto"。文档解释了"auto"是如何工作的:
如果X和Y的尺寸比C大一个,则选择“flat”。如果尺寸相同,则选择“nearest”。
由于索引的是X[1:]Y[1:],因此XYZC)维都匹配,因此pcolormesh使用"nearest"着色方法。
每个网格点将有一个颜色居中,在相邻网格中心之间延伸一半。
因此,您的单元格以(X,Y)点为中心。
要解决这个问题,请提供整个XY数组,这将导致数组比Z大1,从而触发使用shading="flat",它使用(X[i,j], Y[i,j])作为左下角坐标。
这是结果(我删除了轴的限制,并将纵横比设置为1)。

相关问题