отрисовка графика в реальном времени в ошибке рекурсии matplotlib - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь использовать приведенный ниже код для динамического рисования графика из фрейма данных pandas.Проблема в том, что строка update_graph () выдает ошибки (https://gist.github.com/ishikawa-rei/759d9063c3add40712cd5a16696f9532). Если я закомментирую строку, код запускается, но на графике ничего не отображается, как ожидалось. Данные взяты из файла csv, который имеетодна строка данных, которая обновляется при изменении чего-либо и содержит только значения от -100 до 100, пример ниже.

google ... amazon ... apple
77         50         -100

.

import matplotlib
matplotlib.use('TkAgg')

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

objects = ("google","ibm","kaspersky","amazon","facebook","sony","microsoft","apple")

def update_graph():
    fig.clear()
    cols = ["google","ibm","kaspersky","amazon","facebook","sony","microsoft","apple"]
    df = pd.read_csv("C:/Users/dmnte/PycharmProjects/sentiment_analysis/live_information.csv",header=None,  names=cols,encoding = "UTF-8",low_memory=False)
    y_pos = np.arange(len(objects))
    performance = df.values.tolist()
    flat_list = [item for sublist in performance for item in sublist]
    plt.bar(y_pos, flat_list, align='center', alpha=0.5)
    plt.xticks(y_pos, objects)
    plt.ylabel('company sentiment (%)')
    plt.title('Real time company sentiment')
    fig.canvas.draw()
    win.after(20000, update_graph())

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

1 Ответ

0 голосов
/ 13 октября 2018

Я думаю, что единственная проблема с вашим кодом состоит в том, что вы не передаете ссылку update_graph на win.after(), а возвращаемое значение после выполнения update_graph().То, что я хочу сказать: есть разница между передачей update_graph и update_graph() в качестве параметра.

Вот код рабочей игрушки, где я изменил загрузку данных.Вы можете подключить свою собственную функцию get_data(), в которую вы загружаете файл .csv.

import matplotlib
matplotlib.use('TkAgg')

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


objects = ("google","ibm","kaspersky","amazon","facebook","sony","microsoft","apple")

def get_data():
    return np.random.randint(1,100, len(objects))

def update_graph():
    fig.clear()
    y_pos=np.arange(len(objects))
    data=get_data()
    plt.bar(y_pos, data, align="center", alpha=0.5)
    plt.xticks(y_pos, objects)
    plt.ylabel("company sentiment (%)")
    plt.title("Real time company sentiment")
    fig.canvas.draw()
    fig.canvas.manager.window.after(100, update_graph)


fig = plt.figure()
win = fig.canvas.manager.window
win.after(100, update_graph)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...