Matplotlib热力图坐标轴标签与单元格对齐异常的解决方法
修复Matplotlib热力图轴标签与单元格中心对齐的问题
问题出在extent参数设置和刻度位置的匹配上:你当前把extent设为x从0到4、y从0到6,热力图单元格会均分这个范围,导致刻度标签落在单元格边界而非中心。
修复方案:
- 调整
extent范围:将轴的起止边界向外扩展0.5,让每个单元格的中心正好对应x_values和y_values的数值。 - 修正刻度位置:直接用
x_values和y_values的元素作为刻度位置,确保标签精准对齐单元格中心。
修改后的完整代码:
import numpy as np import matplotlib.pyplot as plt x_values = [x for x in range(5)] y_values = [y for y in range(7)] z_values = np.random.rand(len(y_values), len(x_values)) # 调整extent,使单元格中心对齐x/y轴数值 plt.imshow(z_values, cmap='viridis', extent=[min(x_values)-0.5, max(x_values)+0.5, min(y_values)-0.5, max(y_values)+0.5], origin='lower', aspect='auto') # 保持y轴反转(若需要从上到下显示y值) plt.gca().invert_yaxis() # 直接使用x/y值作为刻度位置,标签与位置完全匹配 plt.yticks(y_values, y_values) plt.xticks(x_values[::2], x_values[::2]) plt.show()
原理说明:
扩展extent后,每个单元格的宽度和高度变为1,单元格中心正好落在x_values(0-4)和y_values(0-6)的整数位置上,此时将刻度设置为这些数值,标签就会精准对齐单元格中心。
内容的提问来源于stack exchange,提问作者Fedja
相关产品推荐
相关产品推荐

