获取matplotlib绘图以在鼠标焦点上刷新

时间:2011-11-22 10:41:32

标签: python matplotlib

我正在使用具有交互模式的matplotlib并且正在执行计算,比如说有很多步骤的优化,我在每个步骤绘制中间结果以进行调试。这些图通常会填满屏幕并在很大程度上重叠。

我的问题是,在计算过程中,当我点击它们时,部分或完全遮挡的数字不会刷新。它们只是一片空白。

我想在点击图形时强制重绘,否则显示它是没用的。目前,我在代码中插入了pdb.set_trace(),所以我可以停下来点击所有数据以查看发生了什么

有没有办法强制matplotlib重新绘制图形,只要它获得鼠标焦点或调整大小,即使它正在忙着做其他事情?

2 个答案:

答案 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()

每当您点击图表时,这将重绘图形。

您还可以尝试其他事件处理,例如

  • ResizeEvent - 调整画布大小
  • LocationEvent - 鼠标输入新图

查看更多here

答案 1 :(得分:0)

在绘制图形之后,您是否尝试在绘制图plt.figure(fig.number)fig之前调用plt.show()?它应该更新所有数字。