python - 如何用新的绘图或绘图网格替换 matplotlib 图中以前的绘图?

标签 python matplotlib plot

我正在使用 matplotlib 并创建一个添加绘图的图形。如何用新的绘图或新的绘图网格替换绘图? 在我目前的代码中,我使用菜单 dosomething() 创建一个轴,然后使用菜单 dosomethingelse() 在同一轴上添加其他红线。 每次我执行某些操作()时,都会在当前图形下方附加一个新图形,但我实际上想用同一图形中的新坐标轴替换当前坐标轴。我怎样才能做到这一点?

import numpy as np
from Tkinter import *
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

class Test1:   
    def __init__(self, windows, data, axes):
        self.windows = windows
        self.data = data
        self.figure = axes.figure
        self.axes = axes
        self.im = self.axes.plot(data)

def dosomething():
    global test1
    global fig
    fig = Figure(figsize=(12, 4))
    axes = fig.add_subplot(111)
    canvas = FigureCanvasTkAgg(fig, master=windows)
    canvas.get_tk_widget().pack()
    data=np.arange(100)
    test1=Test1(windows, data, axes)

def dosomethingelse():
    global test1
    test1.axes.plot(np.arange(100)+10*(np.random.rand(100)-0.5),'-r')
    test1.figure.canvas.show()

windows = Tk()
menubar = Menu(windows)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Do something", command=dosomething)
filemenu.add_command(label="Do somethingelse", command=dosomethingelse)
menubar.add_cascade(label="Tool", menu=filemenu)

windows.config(menu=menubar)

windows.mainloop()

最佳答案

这看起来不像是执行 tkinter 的非常标准的方法。至少我不太清楚你想要实现什么目标。您的 dosomething 中有以下行:

test1=Test1(windows, data, axes)

这就是每次运行它时生成新窗口的内容。此外,当您在类中时,不需要全局变量。只需使用 self.variable = ...,该变量将在您的整个类以及您将类传递到的对象中可用。

我没有尝试过这个,但也许是这样的:

def dosomething():
    try: 
        self.canvas.get_tk_widget().destroy()
    except:
        pass        
    fig = Figure(figsize=(12, 4))
    axes = fig.add_subplot(111)
    self.canvas = FigureCanvasTkAgg(fig, master=windows)
    self.canvas.get_tk_widget().pack()
    data=np.arange(100)  # not sure what this is for

def dosomethingelse():
    try: 
        self.canvas.get_tk_widget().destroy()
    except:
        pass 
    fig = Figure(figsize=(12, 4))
    fig.plot(np.arange(100)+10*(np.random.rand(100)-0.5),'-r')
    self.canvas = FigureCanvasTkAgg(fig, master=windows)
    self.canvas.get_tk_widget().pack()        

关于python - 如何用新的绘图或绘图网格替换 matplotlib 图中以前的绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33291297/

相关文章:

python - Acrobat Reader 无法打开 Matplotlib 生成的 pdf

python - matplotlib - 沿绘图线更改标记颜色

MATLAB 多条曲线之间的着色区域

python - 使用 python 显示顶点的 3D 法向量

Python - matplotlib 为 "loglog"图修改 xticks

graphics - 如何使用 GNUPlot 根据列中的值绘制单/多行

python - 为什么一些相同的 POST 请求花费的时间比其他请求长两到三倍?

python - 时尚 MNIST 代码将 bag 作为每个真实世界图像的输出

python - 如何让TensorFlow的map()函数返回多个值?

Python os.path.walk() 方法