Динамический сюжет в ноутбуке Python Jupyter с использованием Drawnow - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь построить некоторые данные с камеры динамически, используя drawnow. Однако динамическое построение графиков (с использованием matplotlib и drawnow) не работает на ноутбуке jupyter.

В настоящее время он работает в Pycharm.

Мой код:

import matplotlib.pyplot as plt
import numpy as np
from drawnow import *


x = np.random.randn(10, 2)


def function_to_draw_figure():
    plt.plot(i, j, 'r.')


plt.ion()
figure()
for i, j in x:
    drawnow(function_to_draw_figure)
    plt.xlim(-1, 1)
    plt.ylim(-1, 1)
    plt.pause(0.5)

Я ожидаю, что в этом примере 10 точек будут динамически отображаться на одной фигуре (как в пихарме). На самом деле происходит то, что появляется несколько цифр, а не одна.

Есть мысли, почему я не могу сделать это с помощью ноутбука Jupyter?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Я никогда не понимал цели drawnow. Вы должны получить точно такой же результат, просто вызвав вашу функцию.

Ни drawnow, ни его эквивалент, просто использующие plt.ion() и plt.draw() или plt.pause(), не будут работать в ноутбуках Jupyter. Конечно, не используйте %matplotlib inline бэкэнд (потому что вы не можете анимировать pngs); но также не с %matplotlib notebook бэкэндом из-за цикла событий, который не был запущен, пока не будет показан последний рисунок.

Параметры отображения анимации в блокнотах Jupyter перечислены в Анимация в записной книжке iPython .

Рекомендуется создать FuncAnimation.

.

Анимация сверху будет выглядеть как

%matplotlib notebook
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

x = np.random.rand(10, 2)


def function_to_draw_figure(i):
    line.set_data(*x[i,:])

plt.figure()
line, = plt.plot([], marker="o")
plt.xlim(0, 1)
plt.ylim(0, 1)

ani = FuncAnimation(plt.gcf(), function_to_draw_figure, frames=len(x), 
                    interval=500, repeat=False)

plt.show()
0 голосов
/ 30 апреля 2018

Вы пытались использовать matplotlib с бэкэндом notebook в своем ноутбуке Jupyter?

Вы можете сделать это, добавив магическую команду %matplotlib notebook в ячейку в начале вашей записной книжки (например, сразу после импорта matplotlib)

Подробнее здесь: http://ipython.readthedocs.io/en/stable/interactive/plotting.html

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