получение фигуры matplotlib для обновления новыми данными - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть код ниже, который читает данные из CSV-файла и создает график с помощью matplotlib.Используемый CSV-файл периодически обновляется, и график обновляется, чтобы отразить это.

import matplotlib
matplotlib.use('TkAgg')
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

objects = ("a","b","c","d","e","f","g","h")

def update_graph():
    fig.clear()
    cols = ["a","b","c","d","e","f","g","h"]
    df = pd.read_csv("C:/Users/user/Dropbox/sent_proj/live_info.csv",header=None,  names=cols,encoding = "UTF-8",low_memory=False)
    performance = df.values.tolist()
    flat_list = [int(item) for sublist in performance for item in sublist]
    a = np.array(flat_list)
    y_pos = np.arange(len(objects))
    mask1 = a < 0
    mask2 = a >= 0
    plt.axhline(0, color='black')
    plt.bar(y_pos[mask1], a[mask1], align='center', color = 'r', width= 1, edgecolor = "black", linewidth = 1)
    plt.bar(y_pos[mask2], a[mask2], align='center', color = 'g', width= 1, edgecolor = "black", linewidth = 1)
    plt.xticks(y_pos, objects)
    fig.canvas.draw()
    win.after(20000, update_graph)

fig = plt.figure()
win = fig.canvas.manager.window
win.after(100, update_graph)
plt.show()

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

win = fig.canvas.manager.window

AttributeError: у объекта 'FigureManagerInterAgg' нет атрибута 'window'

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

objects = ("a","b","c","d","e","f","g","h")

def update_graph():
    fig.clear()
    cols = ["a", "b", "c", "d", "e", "f", "g", "h"]
    df = pd.read_csv("live_info.csv", header=None, names=cols, 
    encoding="UTF-8", low_memory=False)
    performance = df.values.tolist()
    flat_list = [int(item) for sublist in performance for item in sublist]
    a = np.array(flat_list)
    y_pos = np.arange(len(objects))
    ax2.axhline(0, color='black')
    mask1 = a < 0
    mask2 = a >= 0
    bars = ax2.bar(y_pos[mask1], a[mask1], align='center', color = 'r', width= 1, edgecolor = "black", linewidth = 1, picker=True)
    bars = ax2.bar(y_pos[mask2], a[mask2], align='center', color = 'g', width= 1, edgecolor = "black", linewidth = 1, picker=True)
    plt.xticks(y_pos, objects)
    for label in ax2.get_xticklabels():  # make the xtick labels pickable
        label.set_picker(True)

    fig.canvas.draw()
    win.after(20000, update_graph)

def onpick1(event):
    (on mouse click stuff)


fig, ax2 = plt.subplots(1)
win = fig.canvas.manager.window
fig.canvas.mpl_connect('pick_event', onpick1)
win.after(100, update_graph)
plt.show()

Можно ли заставить мой новый код обновляться так же, как предыдущий?и как я могу сделать это?Заранее спасибо

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