Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Python (jupyter) анимированный график

Подскажите есть ли возможность в jupyter рисовать анимированные графики, вроде графика загрузки процессора в реальном времени? Пытаюсь сделать мониторинг времени ответа сервера на пинг. Разбираюсь с matplotlib, но то ли он такого не умеет, то ли я не нашел.
import subprocess import re from matplotlib import pyplot as plt
def ping(adress): p = subprocess.Popen(["ping.exe",adress], stdout = subprocess.PIPE) out = p.communicate()[0] t = re.search(r'time=(\d*)',str(out)) time = t.group().replace('time=','') if t else '0' return (time)
x=[0]
%matplotlib inline
for i in range(0,10): x.append(ping('ya.ru')) plt.plot(x)
График просчитывается весь и отрисовывается весь сразу, подскажите как сделать анимацию и возможно ли вообще такое?


Ответ

Можно так сделать:
import psutil from datetime import datetime as dt from collections import deque import matplotlib.pyplot as plt from matplotlib.dates import date2num import matplotlib.animation as animation
%matplotlib notebook
N=600 x = deque([date2num(dt.now())], maxlen=N) y = deque([0], maxlen=N)
fig, ax = plt.subplots(figsize=(8,3)) line, = ax.plot_date(x, y, marker="")
ax.spines['left'].set_visible(False) ax.spines['bottom'].set_visible(False) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False)
def get_data(): # return ping('ya.ru') return psutil.cpu_percent(.15)
def animate(i): x.append(date2num(dt.now())) y.append(get_data()) ax.relim(visible_only=True) ax.autoscale_view(True) line.set_data(x, y) ax.fill_between(x, -0.5, y, color='lightgrey') return line,
ani = animation.FuncAnimation(fig, animate, interval=300) #ani.save("d:/temp/test.gif", writer='imagemagick', fps=10) plt.show()
Результат:

Комментариев нет:

Отправить комментарий