我正在使用具有交互模式的matplotlib并且正在执行计算,比如说有很多步骤的优化,我在每个步骤绘制中间结果以进行调试。这些图通常会填满屏幕并在很大程度上重叠。
我的问题是,在计算过程中,当我点击它们时,部分或完全遮挡的数字不会刷新。它们只是一片空白。
我想在点击图形时强制重绘,否则显示它是没用的。目前,我在代码中插入了pdb.set_trace(),所以我可以停下来点击所有数据以查看发生了什么
有没有办法强制matplotlib重新绘制图形,只要它获得鼠标焦点或调整大小,即使它正在忙着做其他事情?
答案 0 :(得分:1)
这样的事可能适合你:
import matplotlib.pyplot as plt
import numpy as np
plt.ion() # or leave this out and run with ipython --pylab
# draw sample data
fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot(np.random.rand(10))
class Refresher:
# look for mouse clicks
def __init__(self, fig):
self.canvas = fig.canvas
self.cid = fig.canvas.mpl_connect('button_press_event', self.onclick)
# when there is a mouse click, redraw the graph
def onclick(self, event):
self.canvas.draw()
# remove sample data from graph and plot new data. Graph will still display original trace
line.remove()
ax.plot([1,10],[1,10])
# connect the figure of interest to the event handler
refresher = Refresher(fig)
plt.show()
每当您点击图表时,这将重绘图形。
您还可以尝试其他事件处理,例如
查看更多here:
答案 1 :(得分:0)
在绘制图形之后,您是否尝试在绘制图plt.figure(fig.number)
和fig
之前调用plt.show()
?它应该更新所有数字。