Jupyter-лабораторная переоценка ячеек pyplot прерывает отображение интерактивного виджета

#matplotlib #jupyter-lab #ipywidgets

#matplotlib #jupyter-lab #ipywidgets

Вопрос:

Этот код работает, как и ожидалось, на чисто запущенном ядре, но при повторном выполнении второй ячейки вместо интерактивного виджета (ipypml на 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>]
  

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

Ответ №1:

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

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

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