Matplotlib Plott korret aktualisieren

Fragen zu Tkinter.
Antworten
Particledust
User
Beiträge: 15
Registriert: Samstag 1. Februar 2020, 09:17

Abend,

ich möchte in einen bestehenden Plott (f(x) = x, g(x) = x**2) extern einen Datenpunkt einfügen. Dazu werden die x- und y- Koordinaten eingegeben und anschließend auf einen Button gedrückt. Angenommen es wird ein Datenpunkt (x1, y1) eingefügt. Dann soll die GUI bei Eingabe eines zweiten Datepunkts (x2, y2) nur die Kurven und (x2, y2) anzeigen. Der erste Punkt soll also gelöscht werden.

Meine Lösung funktioniert nur teilweise: Es können zusätzliche Punkte (x,y) erzeugt werden, die alten werden jedoch nicht gelöscht....

Kennt jemand von euch einen Ansatz, um das oben beschriebene Problem zu lösen.


Code: Alles auswählen

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()
tom.somebody
User
Beiträge: 12
Registriert: Montag 15. Juli 2019, 20:39

Hi, ich bin vor paar Minuten über deinen Forenbeitrag gestoßen, weil ich ein ähnliches Problem hatte. Falls ich dich richtig verstanden habe, dann sollte der folgende Code, so arbeiten, wie du es beschrieben hast:

Code: Alles auswählen

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()

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

x = tk.DoubleVar()
y = tk.DoubleVar()

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

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

def plotgraphs():
    axis.cla()
    axis.plot(x.get(), y.get(), "ko")
    axis.plot(x_values, x_values, "-r")
    axis.plot(x_values, x_values ** 2, "--g")
    axis.grid()
    canvas.draw()

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

root.mainloop(
Mir hat das Tut: https://pythonprogramming.net/how-to-em ... inter-gui/ sehr weitergeholfen..auch für das Verständnis und so.
Ich weiß, dass ich nichts weiß und jetzt wisst ihr es auch. Also Vorsicht bei meinen Beiträgen.
Antworten