Сбросить аргумент при изменении другого аргумента с помощью интерактивного
Мне было интересно, если ipywidgets поддерживает сброс одного из аргументов к значению по умолчанию всякий раз, когда вы манипулируете / варьировать / слайд / меняете один из других интерактивных аргументов. Взяв базовый пример из их документации
%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np
def f(m, b):
plt.figure(2)
x = np.linspace(-10, 10, num=1000)
plt.plot(x, m * x + b)
plt.ylim(-5, 5)
plt.show()
interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot
То, что я искал, это способ сброса аргумента b к некоторому значению по умолчанию всякий раз, когда я изменяю m. Поддерживается ли это, и если нет, сможет ли кто-нибудь придумать умный способ сделать это в любом случае? Я лично не могу.
0 ответов
Это довольно упрощенный пример, но вы можете определить default_value
как обычная переменная экземпляра для b
и затем переназначать его всякий раз m
меняется через нормальный observe
команда.
В этом случае, когда у вас есть два или более взаимодействующих виджетов, может быть проще управлять class
где два входа являются переменными экземпляра, особенно если вы хотите использовать эту комбинацию виджетов в нескольких местах в одном модуле / блокноте.
%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np
def f(m, b):
plt.figure(2)
x = np.linspace(-10, 10, num=1000)
plt.plot(x, m * x + b)
plt.ylim(-5, 5)
plt.show()
interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = '350px'
m = interactive_plot.children[0]
b = interactive_plot.children[1]
b.default_value = 0
def set_b_default(button):
b.value = b.default_value
m.observe(set_default)
interactive_plot