Я пытаюсь изобразить живые цены нескольких акций на одном и том же участке. Я пытаюсь адаптировать этот пример анимации, чтобы сделать то, что я хочу, с несколькими строками, но я не могу заставить свой код отображать и анимировать данные, несмотря на распечатки, показывающие, что я успешно получаю нужные данные. Вот код, который у меня есть:
from itertools import count
from datetime import datetime, timedelta
import random
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from yahoo_fin import stock_info as si
def price(symbols, lookback=5, legend=False, comparison=None, **pltkwargs):
if isinstance(symbols, str):
symbols = [symbols]
times = [[] for symbol in symbols]
prices = [[] for symbol in symbols]
fig, ax = plt.subplots()
lines = [
ax.plot(time_data, price_data, **pltkwargs)[0]
for time_data, price_data in zip(times, prices)
]
# def init():
# for line in lines:
# line.set_data([],[])
# return lines
def animate(i):
for count, symbol in enumerate(symbols):
times[count].append(datetime.now())
prices[count].append(float(si.get_live_price(symbol)))
time_array = np.array(times[count])
price_array = np.array(prices[count])
back_time = time_array[-1] - timedelta(seconds=lookback)
lines[count].set_data(
time_array[time_array > back_time],
price_array[time_array > back_time],
)
return lines
anim = FuncAnimation(fig, animate, interval=1000)
plt.show()
price(["MSFT", "AAPL"])
Насколько я могу судить, ниже следует, как должны работать анимации: я обновляю художников, а затем возвращаю художников, которые изменились. Чего мне не хватает?