शाम,

मैं एक मौजूदा प्लॉट (f(x) = x, g(x) = x**2) में बाहरी रूप से डेटा पॉइंट डालना चाहता हूं। ऐसा करने के लिए, एक्स और वाई निर्देशांक प्रवेश क्षेत्रों में दर्ज किए जा सकते हैं। उपयोगकर्ता तब बिंदु सम्मिलित करने के लिए एक बटन दबा सकता है।

मान लें कि डेटा बिंदु (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()
0
user7722318 20 अप्रैल 2020, 21:16

1 उत्तर

सबसे बढ़िया उत्तर

वांछित व्यवहार प्राप्त करने के लिए आपको मौजूदा बिंदु को हटाना होगा। नीचे करेंगे - आप जो खोज रहे हैं। मैंने इसे थोड़ा बढ़ाया।

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()
0
lostin 21 अप्रैल 2020, 04:35