Matplotlib使用ax.set_aspect()后get_xticks()无法获取新刻度位置
解决matplotlib设置equal纵横比后获取最新x轴刻度的问题
问题原因
matplotlib中,坐标轴刻度的实际计算是延迟到图表绘制渲染阶段才执行的。调用ax.set_aspect('equal')只是修改了纵横比参数,但不会立刻触发刻度的重新计算,因此直接调用ax.get_xticks()得到的还是修改前的旧刻度。
解决方案
在获取刻度前,先触发图表的绘制渲染操作,让matplotlib完成新刻度的计算。可以通过调用fig.canvas.draw()(针对当前figure)或者plt.draw()来实现。
修改后的示例代码
import matplotlib.pyplot as plt import numpy as np x = np.arange(10) fig = plt.figure() ax = plt.axes() ax.scatter(x, 2*x) print("设置纵横比前的x轴刻度:", ax.get_xticks()) ax.set_aspect('equal') # 触发图表绘制,让matplotlib重新计算刻度 fig.canvas.draw() print("设置纵横比后的x轴刻度:", ax.get_xticks()) # 可选:显示图表 plt.show()
输出示例
设置纵横比前的x轴刻度: [-2. 0. 2. 4. 6. 8. 10.] 设置纵横比后的x轴刻度: [0. 2. 4. 6. 8.]
补充说明
- 如果不需要显示图表,仅需获取刻度,
fig.canvas.draw()已经足够完成刻度计算,不需要调用plt.show()。 - 同理,获取y轴新刻度也需要执行同样的步骤,调用
ax.get_yticks()前触发绘制操作。
内容的提问来源于stack exchange,提问作者Albacete
相关产品推荐
相关产品推荐

