在绘制图形之前,在matplotlib中获取轴

时间:2016-08-26 21:19:07

标签: matplotlib

如何在不首先调用plt.show的情况下获取matplotlib轴的刻度标签?我正在尝试设置一组子图,操纵它们的窗口限制并勾选标签,然后将它们全部放在屏幕上。但是,get_xticklabels()方法返回空字符串,除非调用plt.show

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
ax.plot(1, 1)    

print("before plt.show(): {}".format(ax.get_xticklabels()[0].get_text()))
plt.show()
print("after plt.show(): {}".format(ax.get_xticklabels()[0].get_text()))

输出:

In [33]: %run plt_premature_ticks.py
before plt.show():
after plt.show(): 0.94

在实际显示数字之前尝试获取标签不是预期的行为吗?

2 个答案:

答案 0 :(得分:4)

fig.canvas.draw()之前添加ax.get_xticklabels()

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 1)
ax.plot(1, 1)    
fig.canvas.draw()
print("before plt.show(): {}".format(ax.get_xticklabels()[0].get_text()))
plt.show()
print("after plt.show(): {}".format(ax.get_xticklabels()[0].get_text()))

答案 1 :(得分:0)

虽然HYRY给出了原始问题的正确答案,但我遇到了一些需要调用轴的draw方法的情况实例以使刻度标签可见。在这种情况下,应该调用以下内容:

renderer = fig.canvas.get_renderer()
ax.draw(renderer)