Я делаю скрипт, который извлекает данные каждую минуту, а затем пытается показать это в 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 .
Как правильно отобразить график без его замораживания, при этом сохраняя возможность его обновления?
Я не прилагал извлечение данных, поскольку рисунок выглядит так, как я хочу, и поэтому я не счел это уместным, скажите, пожалуйста, если я должен его включить.