Matplotlib pcolormesh四边形坐标偏移0.5,如何修复对齐问题?
问题
根据matplotlib官方文档,pcolormesh的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()
生成的图形

解决方案
问题根源是你给pcolormesh的X、Y维度不符合要求:
- 官方文档明确规定,X的长度必须等于Z的列数+1,Y的长度必须等于Z的行数+1。因为X是每个四边形左边缘的x坐标,Y是下边缘的y坐标,相当于给网格画外围边框,边框的节点数自然比内部格子数多一圈。
你的情况里:
- Z是10行19列,所以X需要20个值,Y需要11个值
- 但你用
X[1:]和Y[1:]做了切片,把X切成了19个,Y切成了10个,刚好和Z的行列数一致。这时候matplotlib会自动将X/Y识别为网格中心点的坐标,而非边缘坐标,最终导致元素偏移0.5。
有两种修复方式:
方式1:使用完整的X、Y数组(最简单)
直接去掉切片操作,传入原始的X和Y数组,完美匹配维度要求:
plt.pcolormesh(X, Y, Z, cmap='jet')
方式2:手动偏移坐标+指定渲染模式
如果一定要保留切片后的X/Y,可将每个坐标向左下偏移0.5,同时显式设置shading='flat'强制按边缘坐标渲染:
plt.pcolormesh(X[1:]-0.5, Y[1:]-0.5, Z, cmap='jet', shading='flat')
修复后,图形中的元素会对齐到左下角坐标,偏移问题即可解决。另外注意你的xlim和ylim设置,确保能覆盖完整的网格范围。
内容的提问来源于stack exchange,提问作者 rok
相关产品推荐
相关产品推荐

