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

Python 获取matplotlib绘图以刷新鼠标焦点,python,matplotlib,Python,Matplotlib,我正在使用matplotlib并启用交互模式,并且正在执行一个计算,比如说一个包含多个步骤的优化,其中我在每个步骤中绘制中间结果,以便进行调试。这些图通常会填满屏幕,并在很大程度上重叠 我的问题是,在计算过程中,当我单击部分或完全遮挡的图形时,它们不会刷新。它们只是一片空白的灰色 我想强制重画,如果必要的话,当我点击一个数字,否则它是没有用的显示它。目前,我在代码中插入pdb.set_trace(),这样我就可以停止并单击所有的图形来查看发生了什么 有没有办法强迫matplotlib在图形获得鼠

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

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

我想强制重画,如果必要的话,当我点击一个数字,否则它是没有用的显示它。目前,我在代码中插入pdb.set_trace(),这样我就可以停止并单击所有的图形来查看发生了什么


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

在图
fig
上绘图之前,您是否尝试调用
plt.figure(fig.number)
,以及在绘图之后调用
plt.show()
?它应该会更新所有的数据。

类似的东西可能适合您:

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-鼠标输入新图形

查看更多信息:

否,我没有尝试使用plt.show()。查看有关其用法()的文档,它似乎不会达到预期效果。@Paul如果您有plt.ion(),show()应该隐式调用draw()。确保首先运行plt.figure(图号),您的图将自动更新。