Интерактивная функция ноутбука IPython: как настроить диапазон слайдера
Я написал код ниже в записной книжке Ipython, чтобы сгенерировать сигмовидную функцию, управляемую параметрами a, которые определяют положение центра сигмоида, и b, который определяет его ширину:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x,a,b):
#sigmoid function with parameters a = center; b = width
s= 1/(1+np.exp(-(x-a)/b))
return 100.0*(s-min(s))/(max(s)-min(s)) # normalize sigmoid to 0-100
x = np.linspace(0,10,256)
sigm = sigmoid(x, a=5, b=1)
fig = plt.figure(figsize=(24,6))
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_xticks([])
ax1.set_xticks([])
plt.plot(x,sigm,lw=2,color='black')
plt.xlim(x.min(), x.max())
Я хотел добавить интерактивность для параметров a и b, поэтому я переписал функцию, как показано ниже:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from IPython.html.widgets import interactive
from IPython.display import display
def sigmoid_demo(a=5,b=1):
x = np.linspace(0,10,256)
s = 1/(1+np.exp(-(x-a)/(b+0.1))) # +0.1 to avoid dividing by 0
sn = 100.0*(s-min(s))/(max(s)-min(s)) # normalize sigmoid to 0-100
fig = plt.figure(figsize=(24,6))
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_xticks([])
ax1.set_yticks([])
plt.plot(x,sn,lw=2,color='black')
plt.xlim(x.min(), x.max())
w=widgets.interactive(sigmoid_demo,a=5,b=1)
display(w)
Есть ли способ установить диапазон ползунков симметричным (например, около нуля)? Мне кажется, что это невозможно сделать, просто установив начальное значение для параметров.
1 ответ
Вы можете создавать виджеты вручную и связывать их с переменными в interactive
функция. Таким образом, вы будете более гибкими и сможете адаптировать эти виджеты к вашим потребностям.
В этом примере создаются два разных ползунка, устанавливаются их максимальное, минимальное, размер шага и начальное значение, и они используются в interactive
функция.
a_slider = widgets.IntSliderWidget(min=-5, max=5, step=1, value=0)
b_slider = widgets.FloatSliderWidget(min=-5, max=5, step=0.3, value=0)
w=widgets.interactive(sigmoid_demo,a=a_slider,b=b_slider)
display(w)