gpt4 book ai didi

python - Matplotlib 图不随数据变化而更新

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:44 51 4
gpt4 key购买 nike

我正在使用 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(),但这并没有什么不同。

提前致谢。

最佳答案

没有任何更新的原因是您正在尝试对不属于 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()

关于python - Matplotlib 图不随数据变化而更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880358/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com