В записной книжке у меня есть три ячейки:
%matplotlib widget
import matplotlib.pyplot as plt
from ipywidgets import interact
import numpy as np
x = np.linspace(0, 6.28, 100)
fig, ax = plt.subplots()
@interact(alpha=(0., 10.))
def someplot(alpha=1.):
ax.clear()
ax.plot(x, np.sin(alpha * x))
fig, ax = plt.subplots()
@interact(alpha=(0., 10.))
def someplot(alpha=1.):
ax.clear()
ax.plot(x, np.cos(alpha * x))
После того, как я последовательно выполню все три ячейки, оба ползунка для первой цифры и ползунок для второго рисунка меняет то, что показано на втором рисунке.
Это очевидно, потому что функция, связанная с первым ползунком, ссылается на глобальную переменную ax
, которая теперь принадлежит второй фигуре. Поэтому я могу избежать такого поведения, используя разные имена, например ax1
, ax2
.
Проблема в том, что в этой записной книжке у меня будет очень много интерактивных графиков, назначение им различных имен будет утомительно, я запутаюсь, я буду двигать клетки вверх и вниз, это будет хаос.
Есть ли другой, более элегантный / автоматизированный способ 1019 *? Например, могу ли я как-то сохранить ссылку на объект с именем ax
в соответствующей функции при создании, например замыкание?