加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Matplotlib图没有更新数据更改

发布时间:2020-12-20 11:43:39 所属栏目:Python 来源:网络整理
导读:我正在使用matplotlib实现一个图像查看器.这个想法是对图像进行的更改(例如过滤器应用程序)将自动更新. 我创建了一个图来显示初始图像,并使用pyQt添加了一个按钮来更新数据.数据确实发生了变化,我已经检查过,但图中没有.但是,如果在我按下过滤器应用程序按钮
我正在使用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().

无论如何,最好使用pl.c.vas()的fig.canvas.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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读