以下代码无法按预期工作:
import matplotlib.pyplot as plt
plt.plot(range(100000),'.')
plt.draw()
ax = plt.gca()
lblx = ax.get_xticklabels()
lblx[1]._text = 'hello!'
ax.set_xticklabels(lblx)
plt.draw()
plt.show()
我想原因是当调用get_xticklabels()时,自动xticklabels没有时间完全创建.事实上,通过添加plt.pause(1)
import matplotlib.pyplot as plt
plt.plot(range(100000),'.')
plt.draw()
plt.pause(1)
ax = plt.gca()
lblx = ax.get_xticklabels()
lblx[1]._text = 'hello!'
ax.set_xticklabels(lblx)
plt.draw()
plt.show()
会给出预期的
我对这种状态不满意(不得不手动插入延迟).我主要担心的是:我怎么知道需要等多少时间?当然这取决于数字元素的数量,机器强度等.
所以我的问题是:是否有一些标志知道matplotlib已经完成了所有元素的绘制?或者有更好的方法来做我正在做的事情?
最佳答案
首先应该注意的是,你可以进行任意短暂的停顿
plt.pause(1e-18)
这里的问题是plt.draw()调用plt.gcf().canvas.draw_idle().这意味着当有时间时,图形会在某个任意点绘制 – 因此_idle.
相反,您可能希望在您需要的代码中的特定点绘制图形.
plt.gcf().canvas.draw()
完整代码:
import matplotlib.pyplot as plt
plt.plot(range(100000),'.')
plt.gcf().canvas.draw()
ax = plt.gca()
lblx = ax.get_xticklabels()
lblx[1]._text = 'hello!'
ax.set_xticklabels(lblx)
plt.show()