看documentation,quadrilateral
应该在左下角有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()
这就是我得到的:
2条答案
按热度按时间txu3uszq1#
正如在评论中提到的,解决方案是改变你的路线:
是
也就是说,使用完整的
X
和Y
数组,它们(由于比相应的Z
维度大1)将定义bin边缘。请注意,您可以将
X
和Y
转换为2D数组,即,并将它们传递给
pcolormesh
,尽管如果X
和Y
只是1D数组,则pcolormesh
将在内部执行此操作。3hvapo4f2#
如果你仔细阅读documentation,你会发现这个问题。当你没有提供
shading
参数时,它默认为"auto"
。文档解释了"auto"
是如何工作的:如果X和Y的尺寸比C大一个,则选择“flat”。如果尺寸相同,则选择“nearest”。
由于索引的是
X[1:]
和Y[1:]
,因此X
、Y
和Z
(C
)维都匹配,因此pcolormesh
使用"nearest"
着色方法。每个网格点将有一个颜色居中,在相邻网格中心之间延伸一半。
因此,您的单元格以
(X,Y)
点为中心。要解决这个问题,请提供整个
X
和Y
数组,这将导致数组比Z
大1,从而触发使用shading="flat"
,它使用(X[i,j], Y[i,j])
作为左下角坐标。这是结果(我删除了轴的限制,并将纵横比设置为1)。