如何使用非均匀浮点列表设置matplotlib等间距x轴刻度标签
问题原因
使用imshow绘制矩阵时,x轴默认的坐标范围对应矩阵的列索引,5×20矩阵的x轴坐标范围为[-0.5, 19.5]。原代码仅通过MaxNLocator指定刻度数量,未关联刻度位置和标签的对应关系,导致标签和实际生成的刻度位置错位,出现标签丢失、顺序错误的问题。
修正代码
如果你的需求是x轴显示4个等间距刻度,依次对应指定标签,可直接先设置刻度位置再关联标签,无需使用MaxNLocator:
import numpy as np import matplotlib.pyplot as plt M = np.random.rand(5, 20) fig, ax = plt.subplots() pos = ax.imshow(M, aspect='auto', cmap='jet') fig.colorbar(pos, ax=ax) labels = [1.2, 2.3, 4.7, 8.3] # 生成4个覆盖整个x轴范围的等间距刻度位置 ax.set_xticks(np.linspace(0, M.shape[1]-1, len(labels))) # 绑定对应标签 ax.set_xticklabels(labels) plt.show()
可选扩展
如果你需要刻度位置和标签数值的实际分布成正比(即刻度间距与1.2、2.3等数值的差值匹配,非等间距刻度),可使用如下配置:
labels = [1.2, 2.3, 4.7, 8.3] # 先将x轴范围映射到标签的数值范围 ax.set_xlim(labels[0], labels[-1]) # 直接在对应数值位置设置刻度 ax.set_xticks(labels) ax.set_xticklabels(labels)
内容的提问来源于stack exchange,提问作者fishbacp
相关产品推荐
相关产品推荐

