Pyplot либо зависает, либо не отображается в интерактивном режиме - PullRequest
0 голосов
/ 11 февраля 2020

Я делаю скрипт, который извлекает данные каждую минуту, а затем пытается показать это в pyplot matplotlib. У меня есть три основных файла: control_cycle.py для управления l oop и взаимодействия с другими функциями, api_connect.py (a c) для связи с сервером и выборки данных и graph_stock.py (gs) с функцией для построения графика данные. Поэтому важно, чтобы все управление временем и ожиданием контролировалось control_cycle.py. Однако я просто не могу заставить графику работать правильно. Я перепробовал более дюжины решений, таких как , это , но они либо: ( A ) делают пиплот некалибельным / масштабируемым / затемненным, ( B ) сохранить значок ракеты в строке меню без графиков или (C) выглядеть великолепно, но не обновлять и блокировать весь скрипт.

Код в control_cycle.py:

if __name__ == '__main__':

    try:
        graph_stock = input("Wil je het aandeel plotten (j/n)? ").lower() == "j"

        while True:
            time_data, stock_close = ac.get_data('MSFT')
            if graph_stock:
                gs.graph_stock(time_data, stock_close)
            time.sleep(60)
    except KeyboardInterrupt:
        pass

Соответствующий код в graph_stock.py, обеспечивающий возможность замораживания A:

import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
import matplotlib.dates as md
import matplotlib.ticker as ticker
import time

def graph_stock(time_data, stock_data):

    fig = plt.figure(num=1, figsize=(12,6)) #control size and set axis

    localtime = time.asctime(time.localtime(time.time())) #To see if it updates
    plt.title("close rates every minute " + localtime)
    plt.plot(time_data,stock_data, '-b.')
    plt.pause(0.05)

Если я удаляю plt.pause(0.05) и пытаюсь использовать комбинация plt.ion() поверх файла, plt.draw() и fig.canvas.draw() в функции, которую он не показывает, опция B

Наконец, замена plt.pause(0.05) на plt.show() останавливает обновление, опция C. plt.show(block=False) снова дает опцию B .

Как правильно отобразить график без его замораживания, при этом сохраняя возможность его обновления?

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

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