Как многократно обновлять гистограмму matplotlib в tkinter - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь создать приложение: домашняя страница

Содержит кнопки типа графика и кнопки воспроизведения / паузы. Когда я выбираю указанный c файл и нажимаю на панель, он генерирует график, подобный следующему: гистограмма

Вы также можете увидеть слайдер. При перемещении различные значения читаются из файла CSV и график обновляется. Это событие нажатия кнопки панели.

def bargraph(index = 0):
    global pause
    global typegraph 
    typegraph  = "bar"
    right = df.loc[(df["index"]==index) & (df.foot == "right"),"total_force"].values
    left = df.loc[(df["index"]==index) & (df.foot == "left"),"total_force"].values

    data = [[left[0],right[0]]]
    X = ["left", "right"]

    fig = Figure(figsize=(6, 4), dpi=96)
    ax = fig.add_subplot(111)

    barlist = ax.bar(X , data[0], color = 'b', width = 0.25)


    barlist[0].set_color('r')

    graph = FigureCanvasTkAgg(fig, master=win)
    canvas = graph.get_tk_widget()
    canvas.place(x= 300, y = 200)

    def updateScale(value):
        print ("scale is now %s" % (value))


        left = df.loc[(df["index"] == int(value)) & (df['foot'] == "left"), "total_force"].values
        right = df.loc[(df["index"] == int(value)) & (df['foot'] == "right"), "total_force"].values

        data = [[left[0],right[0]]]

        X = ["left", "right"]
        ax.clear()
        barlist = ax.bar(X , data[0], color = 'r', width = 0.25)


        barlist[0].set_color('b')
        ax.relim()
        ax.autoscale()

        #draw canvas
        fig.canvas.draw()
        fig.canvas.flush_events()

    value = tk.DoubleVar()
    scale = tk.Scale(win, variable=value, orient="horizontal",length = 200, 
                     from_=df['index'].unique().min(), to=df['index'].unique().max(), resolution =1,command=updateScale)
    scale.place(x= 900, y = 200)

Я добавил этот обработчик событий в кнопку воспроизведения:

def startanimation():
    global index
    global pause
    global typegraph
    pause = 0 
    print("pause"+ str(pause))
    for i in range(0,100,1):

        if pause == 1:
            break
        if "bar" in typegraph :
            index+=1
            print("index is "+ str(index))
            bargraph(index)
            time.sleep(30)
            if index == 1302:
                print("lenght")
                index = 0
                break

Но это не обновляет график. Как мне обновлять график после каждой секунды или около того?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...