Matplotlib图未更新数据更改

时间:2015-06-17 00:20:04

标签: python matplotlib pyqt4

我正在使用matplotlib实现图像查看器。我们的想法是对图像进行的更改(例如过滤器应用程序)将自动更新。

我创建了一个图来显示初始图像,并使用pyQt添加了一个按钮来更新数据。数据确实更改,我已经检查过,但图中没有。 然而,如果在我按下过滤器应用程序按钮后,我使用matplotlib的标准工具栏移动图像,图像然后更新。

我认为在更新图像时我做错了什么,但由于移动它实际上会强制更新,因此它会显示数据更改。但是,当我按下按钮时,我想要发生这种情况。

以下是一些代码。这是初始数字初始化,显示原始图像:

    self.observableFig = Figure((4.0, 4.0), dpi=100)
    self.canvas = FigureCanvas(self.observableFig)
    self.canvas.setParent(self.observableWindow)
    self.canvas.setFocusPolicy(Qt.StrongFocus)
    self.canvas.setFocus()

    self.canvas.mpl_connect('button_press_event', self.on_click)

    # Showing initial data on Window
    self.observableFig.clear()
    self.observableAxes = self.observableFig.add_subplot(1, 1, 1)
    min, max = self.min, self.max
    self.observableAxes.imshow(self.data, vmin=min, vmax=max, origin='lower') 

这是按下更改数据的按钮时的事件:

    self.observableAxes.imshow(self.data/2, origin='lower')
    #    plt.clf()
    #    plt.draw()
    #    plt.show()

我已尝试draw()show(),基本上我在pyplot找到了关于此事的任何内容。我一开始就尝试使用plt.ion()和不使用draggable,但它在这方面没有任何区别。

提前致谢。

1 个答案:

答案 0 :(得分:7)

没有任何更新的原因是您尝试将pyplot方法用于不属于pyplot状态机的数字。 plt.draw()不会绘制此数字,因为plt不知道该数字存在。

改为使用fig.canvas.draw()

无论如何,最好使用fig.canvas.draw() plt.draw(),因为很清楚你正在绘制哪个数字(前者绘制一个,后者绘制全部,但只有当它们被{{{1}跟踪时{1}})。

尝试以下几点:

pyplot