首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matplotlib.axes.Axes.imshow()绘制的更新图

matplotlib.axes.Axes.imshow()绘制的更新图
EN

Stack Overflow用户
提问于 2019-08-14 15:58:33
回答 1查看 154关注 0票数 0

我需要更新一个用tkinter包装的tkinter图形。下面是一个代码示例:

代码语言:javascript
复制
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk
import random

matplotlib.use('TkAgg')


def get_data():
    return [[random.randint(1, 100), random.randint(1, 100)], [random.randint(1, 100), random.randint(1, 100)]]


class MainWindow:
    def __init__(self, window):
        self.window = window
        self.figureCanvas = FigureCanvas(self.window)
        self.button = tk.Button(window, text="Update", command=self._button_command)
        self.button.pack()
        self._pack_figure()

    def _button_command(self):
        self.figureCanvas.data = get_data()
        self.figureCanvas.plot()

    def _pack_figure(self):
        canvas = FigureCanvasTkAgg(self.figureCanvas.figure, master=self.window)
        canvas.get_tk_widget().pack()
        canvas.draw()


class FigureCanvas:
    data = []

    def __init__(self, window):
        self.window = window
        self.figure = Figure(figsize=(6, 6))
        self._create_plot_object()

    def _create_plot_object(self):
        self.axes = self.figure.add_subplot(111)
        self.plot_object = self.axes.imshow([[0, 0], [0, 0]])

    def update(self):
        self.plot_object.set_data(self.data)


_window = tk.Tk()
_window.title("Snapshot")
start = MainWindow(_window)
_window.mainloop()

它很好地绘制了第一个图像[[0, 0], [0, 0]],但是它不会在plot_object.set_data(self.data)更新图像数据之后重新绘制。

更新

我尝试在FigureCanvas.update()下调用以下函数

代码语言:javascript
复制
matplotlib.backend_bases.FigureCanvasBase(self.figure).draw_idle()
self.axes.redraw_in_frame()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-14 22:02:41

代码的正确版本可能如下所示。我去掉了错误的FigureCanvas,并将所有内容放在一个类中(当然,您可以使用不同的类,但不要混淆它们的名称)。此外,这里还解决了其他几个问题(例如,不调用回调,提供最小和最大颜色值)。

代码语言:javascript
复制
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk

def get_data():
    return np.random.randint(1,100,size=(2,2))

class MainWindow:
    def __init__(self, window):
        self.window = window
        self.button = tk.Button(window, text="Update", command=self._button_command ) 
        self.button.pack()
        self._pack_figure()
        self._create_plot_object()

    def _button_command(self):
        self.data = get_data()
        self.plot()

    def _pack_figure(self):
        self.figure = Figure(figsize=(6, 6))
        self.canvas = FigureCanvasTkAgg(self.figure, master=self.window)
        self.canvas.get_tk_widget().pack()

    def _create_plot_object(self):
        axes = self.figure.add_subplot(111)
        self.plot_object = axes.imshow([[0, 0], [0, 0]], vmin=0, vmax=100)

    def plot(self):
        self.plot_object.set_data(self.data)
        self.canvas.draw_idle()

_window = tk.Tk()
_window.title("Snapshot")
start = MainWindow(_window)
_window.mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57498231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档