Обновите сюжет matplotlib правильно - tkinter - PullRequest
0 голосов
/ 20 апреля 2020

Вечер,

Я хочу вставить точку данных извне в существующий график (f (x) = x, g (x) = x ** 2). Для этого в поля ввода можно ввести координаты x и y. Затем пользователь может нажать кнопку, чтобы вставить точку.

При условии, что точка данных (x1, y1) вставлена, и пользователь пытается ввести новую точку данных (x2, y2). В этом случае GUI должен отображать только кривые (f (x), g (x)) и точку (x2, y2). Последняя точка (x1, y1) должна быть удалена.

Мое решение работает только частично: можно создать дополнительные точки (x, y), но старые не удаляются ...

Знает ли кто-нибудь из вас подход к решению проблемы, описанный выше.

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

fig = Figure(figsize = (9, 6), facecolor = "white")

axis = fig.add_subplot(111)
x_values = np.array([1,2,3,4,5,6,7])
axis.plot(x_values, x_values, "-r")
axis.plot(x_values, x_values ** 2, "--g")
axis.grid()

root = tk.Tk()

Label(root, text = "x =" ).grid(row = 0, column = 0)
Label(root, text = "y =" ).grid(row = 1, column = 0)

x = DoubleVar()
y = DoubleVar()

x_entry = Entry(root, textvariable = x).grid(row = 0, column = 1)
y_entry = Entry(root, textvariable = y).grid(row = 1, column = 1)

def plotgraphs():
    axis.plot(x.get(), y.get(), "ko")

    canvas = FigureCanvasTkAgg(fig, master = root)
    canvas._tkcanvas.grid(row = 2, column = 1)

Button(root, text = "New Graphs", command = plotgraphs).grid(row = 0, column = 2)

canvas = FigureCanvasTkAgg(fig, master = root)
canvas._tkcanvas.grid(row = 2, column = 1)

root.mainloop()

1 Ответ

1 голос
/ 21 апреля 2020

Вам нужно удалить существующую точку, чтобы получить желаемое поведение. Ниже будет делать то, что вы ищете. Я немного его улучшил.

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

fig = Figure(figsize = (9, 6), facecolor = "white")

axis = fig.add_subplot(111)
x_values = np.array([1,2,3,4,5,6,7])
axis.plot(x_values, x_values, "-r", label = 'f(X) = x')
axis.plot(x_values, x_values ** 2, "--g", label = 'f(x) = x\N{SUPERSCRIPT TWO}')
axis.grid()
axis.legend()
root = tk.Tk()

Label(root, text = "x =" ).grid(row = 0, column = 0)
Label(root, text = "y =" ).grid(row = 1, column = 0)

x = DoubleVar()
y = DoubleVar()

x_entry = Entry(root, textvariable = x).grid(row = 0, column = 1)
y_entry = Entry(root, textvariable = y).grid(row = 1, column = 1)

def plotgraphs():
    if (len(axis.lines)) == 3: # Count existing plotted lines and delete if already existing
        del (axis.lines[2])
        axis.plot(x.get(), y.get(), "ko", label = 'Input point')
    else:
        axis.plot(x.get(), y.get(), "ko", label = 'Input point')
    axis.legend()
    canvas = FigureCanvasTkAgg(fig, master = root)
    canvas._tkcanvas.grid(row = 2, column = 1)

Button(root, text = "New Graphs", command = plotgraphs).grid(row = 0, column = 2)

canvas = FigureCanvasTkAgg(fig, master = root)
canvas._tkcanvas.grid(row = 2, column = 1)

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