簡體   English   中英

Matplotlib圖未更新數據更改

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM