Как анимировать линейный график на странице с подсветкой - PullRequest
2 голосов
/ 04 октября 2019

Я работаю с проектом ML и хочу в реальном времени отобразить диаграмму с фитнес-функцией.

Я использую код из этого ответа SO и онработает нормально, пока диаграмма отображается в окне matplotlib. Как только я добавляю его на страницу, он становится статичным изображением.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

max_x = 5
max_rand = 10

x = np.arange(0, max_x)
ax.set_ylim(0, max_rand)
line, = ax.plot(x, np.random.randint(0, max_rand, max_x))


def init():  # give a clean slate to start
    line.set_ydata([np.nan] * len(x))
    return line,


def animate(i):  # update the y values (every 1000ms)
    line.set_ydata(np.random.randint(0, max_rand, max_x))
    return line,

ani = animation.FuncAnimation(
    fig, animate, init_func=init, interval=1000, blit=True, save_count=10)

st.pyplot(plt)

Есть идеи, как анимировать диаграмму? Это не должно быть matplotlib.

1 Ответ

2 голосов
/ 05 октября 2019

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

import matplotlib.pyplot as plt
import numpy as np
import streamlit as st
import time

fig, ax = plt.subplots()

max_x = 5
max_rand = 10

x = np.arange(0, max_x)
ax.set_ylim(0, max_rand)
line, = ax.plot(x, np.random.randint(0, max_rand, max_x))
the_plot = st.pyplot(plt)

def init():  # give a clean slate to start
    line.set_ydata([np.nan] * len(x))

def animate(i):  # update the y values (every 1000ms)
    line.set_ydata(np.random.randint(0, max_rand, max_x))
    the_plot.pyplot(plt)

init()
for i in range(100):
    animate(i)
    time.sleep(0.1)
...