Почему не работает моя анимация matplotlib? - PullRequest
1 голос
/ 13 апреля 2020

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

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"])

Насколько я могу судить, ниже следует, как должны работать анимации: я обновляю художников, а затем возвращаю художников, которые изменились. Чего мне не хватает?

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