如何在调用plt.show()前获取matplotlib的刻度标签
问题原因说明
Matplotlib的渲染流程分为布局计算和像素绘制两个阶段,你遇到的问题本质是plt.draw()没有触发完整的布局计算:
- 3.3.4版本中,
plt.draw()是面向交互式场景的轻量更新接口,在画布未通过show()挂载到后端窗口前,它会跳过刻度标签、布局适配这类需要依赖窗口尺寸的计算逻辑,避免重复计算消耗资源,所以此时拿到的标签都是空值。 show()调用时会先完成全量的布局计算,包括刻度位置、标签文本生成,再执行绘制,所以关闭窗口后能拿到有效标签。
预获取刻度标签的实现方法
不用等show()调用,你只需要把plt.draw()替换为底层画布的全量绘制方法fig.canvas.draw()即可,这个接口会强制完成所有布局计算和元素渲染,不受窗口是否显示的影响:
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot(np.random.rand(10)) # 替换plt.draw()为fig.canvas.draw()触发全量计算 fig.canvas.draw() print(ax.get_xticklabels()) plt.show()
运行上述代码,show()调用前就能打印出带有效文本的刻度标签。
内容的提问来源于stack exchange,提问作者Maciek。
相关产品推荐
相关产品推荐

