[英]Matplotlib figure not updating on data change
我正在使用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
跟踪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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.