Переоценка ячейки pyplot в Jupyter-lab нарушает отображение интерактивного виджета

Этот код работает должным образом на чисто запущенном ядре, но при повторном запуске второй ячейки вместо интерактивного виджета (ipypml per https://matplotlib.org/3.3.0/users/interactive.html), я получаю только текст, как на изображении.

Как взаимодействуют jupyter, jupyter-lab, widgets, pyplot и matplotlib, вызывая эту проблему?

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

Ячейка 0:

%matplotlib widget
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

Ячейка 1:

fig,ax = plt.subplots(num=0)
ax.plot(np.arange(4))

Выход ячейки 1:

[<matplotlib.lines.Line2D at 0x161b913a0>]

введите описание изображения здесь


person Dave X    schedule 02.10.2020    source источник


Ответы (1)


Я обнаружил, что мне нужно следить за тем, чтобы фигура открывалась (или закрывалась и снова открывалась) при каждом обновлении. Я использовал параметр plt.subplots(num=0), чтобы повторные обновления не создавали новых, не отображаемых фигур. (обратите внимание, что вторая ячейка на скриншоте была повторно выполнена 5 раз и имеет префикс [6])

plt.close(0)
fig,ax = plt.subplots(num=0)
ax.plot(np.arange(4))

введите описание изображения здесь

person Dave X    schedule 02.10.2020