Как выключением Checkbutton стереть построенный график?
Написал простой код построения графиков в matplotlib с использованием tkinter. Задумано: при включении Checkbutton график строится. При выключении - стирается. Но стирание построенного графика работает не так как задумал. Подскажите, где ошибаюсь? Спасибо.
from tkinter import *
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from tkinter import ttk
import numpy as np
def select():
x = np.arange(0,25,0.1)
if SIN.get() == 1:
y = np.sin(x)
ax.plot(x, y)
canvasAgg.draw()
if SIN.get() == 0: ax.clear()
if COS.get() == 1:
y = np.cos(x)
ax.plot(x, y)
canvasAgg.draw()
if COS.get() == 0: ax.clear()
root = Tk()
fig = Figure(figsize=(5, 4), dpi=100, facecolor='white')
ax = fig.add_subplot(111)
canvasAgg = FigureCanvasTkAgg(fig, master=root)
canvasAgg.draw()
canvas = canvasAgg.get_tk_widget()
canvas.pack(fill=BOTH, expand=True)
f1 = Frame(relief=RAISED, borderwidth=0)
f1.pack(expand=True, side=LEFT)
SIN = IntVar()
SIN_checkbutton = ttk.Checkbutton(f1, text = 'sin', variable = SIN, command=select)
SIN_checkbutton.pack()
f2 = Frame(relief=RAISED, borderwidth=0)
f2.pack(expand=True, side=LEFT)
COS = IntVar()
COS_checkbutton = ttk.Checkbutton(f2, text = 'cos', variable = COS, command=select)
COS_checkbutton.pack()
root.mainloop()
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
Один из вариантов: очищать ось сразу и прорисовывать только выбранные
def select():
x = np.arange(0,25,0.1)
ax.clear()
if SIN.get():
y = np.sin(x)
ax.plot(x, y)
if COS.get():
y = np.cos(x)
ax.plot(x, y)
canvasAgg.draw()
второй вариант - сделать две разные оси слева и справа. Удобно для разномасштабных графиков
def select():
x = np.arange(0,25,0.1)
if SIN.get():
y = np.sin(x)
ax1.plot(x, y)
else:
ax1.clear()
if COS.get():
y = np.cos(x)
ax2.plot(x, y)
else:
ax2.clear()
canvasAgg.draw()
fig = Figure(figsize=(5, 4), dpi=100, facecolor='white')
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()