Matplotlib图未更新数据更改

Fra*_*rez 3 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') 
Run Code Online (Sandbox Code Playgroud)

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

    self.observableAxes.imshow(self.data/2, origin='lower')
    #    plt.clf()
    #    plt.draw()
    #    plt.show()
Run Code Online (Sandbox Code Playgroud)

我已经尝试了draw(),show()基本上我发现的任何事情pyplot.我在开始时也尝试过plt.ion(),但是在这方面没有任何区别.

提前致谢.

Joe*_*ton 7

什么都没有更新的原因是你正在尝试使用pyplot不属于pyplot状态机的数字的方法.plt.draw()不会画这个数字,因为plt不知道这个数字存在.

fig.canvas.draw()改用.

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

尝试这些方面:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.random((10,10))

# To make a standalone example, I'm skipping initializing the 
# `Figure` and `FigureCanvas` and using `plt.figure()` instead...
# `plt.draw()` would work for this figure, but the rest is identical.
fig, ax = plt.subplots()
ax.set(title='Click to update the data')
im = ax.imshow(data)

def update(event):
    im.set_data(np.random.random((10,10)))
    fig.canvas.draw()

fig.canvas.mpl_connect('button_press_event', update)
plt.show()
Run Code Online (Sandbox Code Playgroud)