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