Ранее в посте Юпитер и интерактивность - темная строна я указал, что в простом случае matplotlib не работает нормально интерактивно. Однако чтобы это вернуть достаточно установить ipympl. Чтобы с гарантией это было в Юпитере - ставим через конду:
conda install -c conda-forge ipympl
Теперь это есть в системе:
Берем код из ранее упомянутого примера и добавляем в самое начало немного магии:
%matplotlib widget
А далее создаем два ползунка и кнопку, которая будет обрабатывать нажатие:
button = widgets.Button(description='My Button')
sF = widgets.FloatSlider(
value=1,
min=0,
max=10.0,
step=0.1,)
sPhase = widgets.FloatSlider(
value=1,
min=0,
max=10.0,
step=0.1,)
Теперь осталось сделать обработчик кнопки, привязать его к кнопке и разместить элементы. Для размещения я использую Vbox, то есть в нем элементы будут размещаться последовательно вертикально. Туда же в качестве виджета я помещаю и вывод - widgets.Output() :
outt = widgets.Output()
def on_butt_clicked(b):
with outt:
clear_output()
global sF,sPhase
plot_f(sF.value, sPhase.value)
button.on_click(on_butt_clicked)
widgets.VBox([sF, sPhase, button, outt ])
И вот теперь все начинает работать:
Меняем значение ползунка и еще раз нажимаем кнопку:
Как можно видеть, заголовок у графика поменялся с Figure 3 на Figure 4. Однако картинка осталась на месте, правильно отображенная и не стала клонироваться. Более того, как и в случае режима notebook, задаваемого магическими командами, у графика есть такая же панель инструментов, только слева, а не внизу.
Правда, если изменить масштаб/сдвинуть график, то после нажатия кнопки это все пропадет в силу того, что картинка полностью перерисовывается. Тем не менее путем доустановки отсутствующего в штатной комплктации ipympl можно использовать интерактивные возможности Юпитера и с matplotlib.
No comments:
Post a Comment