Сбросить аргумент при изменении другого аргумента с помощью интерактивного

Мне было интересно, если 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
Другие вопросы по тегам