фигура предназначена для анимации. Это сбрасывает магию отображения статических фигур, которые иначе не являются частью результата ячейки; Сама анимация отображается совершенно другим механизмом (включая html-форматирование результата оценки ячейки).

ал создавать серию интерактивных тетрадей для лекции по DSP. До сих пор мне удалось скопировать и внедрить MWE, вставленный ниже. Однако в дополнение к рисунку matplotlib, содержащему анимацию, я всегда получаю пустое окно Matplotlib. Есть идеи, как подавить это поведение?

python: 3.6.3 matplotlib: 2.0 и 2.1 IPython: 5.3.0 ОС: Win 7 64 бит

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

from matplotlib import animation
from IPython.display import HTML

plt.rcParams['figure.figsize'] = (5,3)
plt.rcParams['figure.dpi'] = 100
plt.rcParams['savefig.dpi'] = 100
plt.rcParams["animation.html"] = "jshtml"  # for matplotlib 2.1 and above, uses JavaScript
#plt.rcParams["animation.html"] = "html5" # for matplotlib 2.0 and below, converts to x264 using ffmpeg video codec
t = np.linspace(0,2*np.pi)
x = np.sin(t)

fig, ax = plt.subplots()
ax.axis([0,2*np.pi,-1,1])
l, = ax.plot([],[])

def animate(i):
    l.set_data(t[:i], x[:i])

ani = animation.FuncAnimation(fig, animate, frames=len(t))
ani

Записную книжку также можно посмотреть под:

https://github.com/chipmuenk/dsp_fpga/blob/master/notebooks/01_LTI/MWE_animation.ipynb

При статическом рендеринге в github отображается только пустое окно графика, а не анимация JavaScript.

 Goyo06 нояб. 2017 г., 15:15
Удалить магию%matplotlib inline или использовать%matplotlib agg вместо.
 Goyo06 нояб. 2017 г., 15:45
Оба обходных пути отрисовывают все в браузере, но без пустой фигуры.
 Chipmuenk06 нояб. 2017 г., 15:34
Я пробовал разные бэкэнды, но проблема в том, что ноутбуки будут работать на виртуальном сервере, на котором студенты будут входить в систему и взаимодействовать со своим браузером. Мне показалось, что самое чистое решение ограничить вывод одним окном.

Ответы на вопрос(2)

Решение Вопроса

Линии

%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots()

создаст вывод с пустой цифрой.

Вы можете предотвратить вывод ячейки в блокнот jupyter, используя%%capture.

Cell1:

%%capture
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.animation
plt.rcParams["animation.html"] = "jshtml"
import numpy as np

t = np.linspace(0,2*np.pi)
x = np.sin(t)

fig, ax = plt.subplots()
h = ax.axis([0,2*np.pi,-1,1])
l, = ax.plot([],[])

def animate(i):
    l.set_data(t[:i], x[:i])

ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))

CELL2:

ani

 ImportanceOfBeingErnest06 нояб. 2017 г., 15:24
Нет, причина, по которой оба решения работают, на самом деле одна и та же: сюжет закрыт. Либо перейдя к следующей ячейке, либо закрыв ее уже внутри ячейки. Выберите тот метод, который вам больше нравится.
 Chipmuenk06 нояб. 2017 г., 15:17
Ухоженная! При поиске %% capture я нашел другое решение: fig, ax = plt.subplots () plt.close (); также сделал трюк для меня. Ручки дляfig а такжеax очевидно не удаляются при закрытии сюжета. Есть ли причины отдавать предпочтение тому или иному решению?

Вот альтернативный пример:

%matplotlib inline
from matplotlib import animation, pyplot as plt
import numpy as np
plt.rc('animation', html='html5')

data = np.random.random(20)
fig = plt.figure()

ax = fig.add_subplot(111)   
ax.plot(data) # draw background

anim = animation.ArtistAnimation(fig, [[ax.scatter(x, y)] for x, y in enumerate(data)])
anim

Результат (anim) отображается анимированно, но потенциальным побочным эффектом является дополнительное отображение статического кадра. Этот побочный эффект исчезает, еслиplt.figure вызов происходит в отдельной ячейке доadd_subplot метод.

Это работает, потому что (как сказал ImportanceOfBeingErnest) создание новой фигуры вызывает побочный эффект отображения статического изображения (изображающего, как фигура оставалась при завершении текущей оценки ячейки в блокноте). Но если на фигуре еще ничего не было заполнено (даже оси), вы препятствуете отображению какого-либо изображения (не требуя магии юпитера для его подавления).

 benjimin04 янв. 2018 г., 23:25
Другая альтернатива - опустить%matplotlib inline полностью или, если это невозможно, повторить это немедленнопосле фигура предназначена для анимации. Это сбрасывает магию отображения статических фигур, которые иначе не являются частью результата ячейки; Сама анимация отображается совершенно другим механизмом (включая html-форматирование результата оценки ячейки).

Ваш ответ на вопрос