Печать данных в 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()

Ответы на вопрос(1)

Ваш ответ на вопрос