Замена существующей гистограммы на новую, удалив старую в Python - PullRequest
0 голосов
/ 22 сентября 2018

Я новичок в Python.Я ожидал, что plt.close('all') удалит старый график, когда нажал кнопку с именем CHANGE DATA .Вместо этого новый граф помещается рядом со старым графом (слева от него).При дополнительных щелчках появилось бы больше графиков, но старый никогда не удалялся.

Я все делаю неправильно или это ограничение использования tkinter и matplotlib ?

import tkinter as tk
from tkinter import Button
import numpy as np
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import matplotlib.pyplot as plt

matplotlib.use('TkAgg')

def displ_graf(datalst):
    ff = plt.figure(figsize=(5.6,4), dpi=100)
    xx = ff.add_subplot(1,1,1)
    nn = np.arange(len(datalst))
    bb = xx.barh(nn, datalst, 0.8)
    ff.tight_layout
    cc = FigureCanvasTkAgg(ff, master=ww)
    cc.draw()
    cc.get_tk_widget().pack(side=tk.RIGHT)

def graf2():
    plt.close('all')
    data2 = [64, 58, 12, 91, 49, 32, 70, 23, 35]
    displ_graf(data2)

ww = tk.Tk()
ww.geometry('700x400')
ww.state('zoomed')
butt3 = Button(ww,text=' CHANGE DATA ',command=graf2, height=1,width=15)
butt3.place(x=790, y=100)

data1 = [31, 41, 59, 26, 53, 58, 97, 93, 23]
displ_graf(data1)
ww.mainloop()

Изображение слева показывает начальный экран до нажатия кнопки, а изображение справа показывает экран после нажатия на кнопке:

enter image description here

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете сделать это с помощью cc.get_tk_widget().destroy().Но ваш код кажется неуклюже написанным.Поэтому, возможно, посмотрите этот пример

Как пример, что он работает:

import tkinter as tk
from tkinter import Button
import numpy as np
import matplotlib
matplotlib.use('TkAgg')

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import matplotlib.pyplot as plt



def displ_graf(datalst):
    ff = plt.figure(figsize=(5.6,4), dpi=100)
    xx = ff.add_subplot(1,1,1)
    nn = np.arange(len(datalst))
    bb = xx.barh(nn, datalst, 0.8)
    ff.tight_layout
    cc = FigureCanvasTkAgg(ff, master=ww)
    cc.draw()
    cc.get_tk_widget().pack(side=tk.RIGHT)
    return cc

def graf2():    
    data2 = [64, 58, 12, 91, 49, 32, 70, 23, 35]
    displ_graf(data2)

def destroy():
    canv.get_tk_widget().destroy()

ww = tk.Tk()
ww.geometry('700x400')
ww.state('normal')
butt3 = Button(ww,text=' CHANGE DATA ',command=graf2, height=1,width=15)
butt4 = Button(ww,text=' destroy ',command=destroy, height=1,width=15)
butt3.place(x=790, y=100)
butt4.place(x=500, y=100)

data1 = [31, 41, 59, 26, 53, 58, 97, 93, 23]
canv = displ_graf(data1)
ww.mainloop()

Но проблема в том, что каждый раз создается новый экземпляр ccты бежишь displ_graph

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...