Plotten von Daten in Tkinter mit matplotlib - Wechseln zwischen Listen

Ich arbeite an der Erstellung eines Programms, das @ nutTkinter undmatplotlib. Ich habe 2 Listen mit Listen (eine für die X-Achse, eine für die Y-Achse) und ich suche eine Schaltfläche, die zwischen den Listen in der Liste wechseln kann. Ich habe einen Großteil des Codes der Frage @ entnommeInteraktives Diagramm basierend auf Tkinter und matplotlib, aber ich kann den Knopf nicht so richtig zum Laufen bringen, wie ich es mag. Ich bin ziemlich neu darin, Klassen zu benutzen und habe ein bisschen Schwierigkeiten, sie zu verstehen.

tft ist das x-datatf1 ist die y-Daten

Datenbeispiel:

x-data = [[1,2,3,4,5],[10,11,13,15,12,19],[20,25,27]]
y-data = [[5.4,6,10,11,6],[4,6,8,34,20,12],[45,25,50]]

Mein Code unten zeigt eine der Listen in einer Liste, wechselt jedoch nicht zwischen den Listen in dieser Liste, wenn ich auf die Schaltfläche klicke. Ich habe andere Methoden auskommentiert, die ich ausprobiert habe. Es heißt immer, dass die App kein Attribut 'line' oder 'canvas 'wenn ich das benutze. Wie ich schon sagte, ich bin sehr neu im Unterricht und ich versuche, sie besser zu verstehen.

Ich habe meinen Code so aktualisiert, dass er jetzt @ erkennevent_num und es wird immer dann der richtige Wert ausgegeben, wenn die Taste gedrückt wird. Das Diagramm wird jedoch nicht mit den neuen Daten aktualisiert (d. H. Es zeigt weiterhin nur den ersten Datensatz an, anstatt zwischen Listen zu wechseln). Ich glaube das Problem liegt in den Funktionenincrease unddecrease .Ich habe versucht mit derself.line, = ax.plot(tft[self.event_num],tf1[self.event_num],'.') undself.canvas.draw() aber es funktioniert nicht. Ich suche nach dem Teil, der bearbeitet werden soll, damit sich das Diagramm ändert.

class App: 


    def __init__(self, master):
        self.event_num = 1
        # Create a container
        frame = Frame(master)
        # Create 2 buttons
        self.button_left = Button(frame,text="< Previous Event",
                                        command=self.decrease)
        self.button_left.grid(row=0,column=0)
        self.button_right = Button(frame,text="Next Event >",
                                        command=self.increase)
        self.button_right.grid(row=0,column=1)

        fig = Figure()
        ax = fig.add_subplot(111)
        fig.autofmt_xdate()
        import matplotlib.dates as mdates
        ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
        self.line, = ax.plot(tft[self.event_num],tf1[self.event_num],'.')


        self.canvas = FigureCanvasTkAgg(fig,master=master)
        self.canvas.show()
        self.canvas.get_tk_widget().grid(row=1,column=0)
        frame.grid(row=0,column=0)

    def decrease(self):
        self.event_num -= 1
        print self.event_num
        self.line, = ax.plot(tft[self.event_num],tf1[self.event_num],'.')
        self.canvas.draw()
        #self.canvas.draw(tft[self.event_num],tf1[self.event_num],'.')
        #self.line.set_xdata(tft[event_num])
        #self.line.set_ydata(tf1[event_num])


    def increase(self):
        self.event_num += 1
        print self.event_num
        self.line, = ax.plot(tft[self.event_num],tf1[self.event_num],'.')
        self.canvas.draw()
        #self.canvas.draw(tft[self.event_num],tf1[self.event_num],'.')
        #self.set_xdata(tft[event_num])
        #self.set_ydata(tf1[event_num])


root = Tk()
app = App(root)
root.mainloop()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage