Печать данных в Tkinter с помощью matplotlib - переключение между списками
Я работаю над созданием программы, которая используетTkinter
а такжеmatplotlib
, У меня есть 2 списка списков (один для оси X, один для оси Y), и я ищу кнопку, которая может переключаться между списками в списке. Я взял большую часть кода из вопросаИнтерактивный сюжет на основе Tkinter и matplotlib, но я не могу заставить кнопку работать так, как мне нравится. Я довольно новичок в использовании классов и немного затрудняюсь их понять.
tft
это х-данныеtf1
это у-данные
Пример данных:
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]]
Мой код ниже будет отображать один из списков в списке, но не будет переключаться между списками в этом списке, когда я нажимаю кнопку. Я прокомментировал другие методы, которые я попробовал. Это всегда говорит, что приложение не имеет атрибутаline
' или же 'canvas
«Когда я использую это. Как я уже сказал, я очень плохо знаком с занятиями и пытаюсь лучше их понять.
Я обновил свой код, чтобы он теперь распознавалevent_num
и он печатает правильное значение при каждом нажатии кнопки. Однако график не обновляется новыми данными (то есть он продолжает показывать только первый набор данных вместо переключения между списками). Я считаю, что проблема заключается в функцияхincrease
а такжеdecrease
Я пытался использоватьself.line, = ax.plot(tft[self.event_num],tf1[self.event_num],'.')
а такжеself.canvas.draw()
но это не работает Я ищу эту часть для редактирования, чтобы график изменился.
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()