ipywidgets: как организовать слайдеры в две колонки
Я пытаюсь решить, как отображать ползунки ipywidgets в двух (или более) столбцах. У кого-нибудь есть пример как это сделать? Мой код (в блокноте jupyter) теперь выглядит следующим образом:
import matplotlib.pylab as plt
import numpy as np
from ipywidgets import interact,FloatSlider,IntSlider
%matplotlib inline
def plotPP(p,p_LP,Tperiods):
t=np.linspace(0,Tperiods*(np.pi*2),1000)
f = plt.figure(figsize=(1.618*6,6))
p_t = p*(1.0+np.cos(t))
plt.plot(t,p_t,'b',lw=2.0)
plt.axhline(p_LP,color='r',lw=2.0)
plt.xlim([t[0],t[-1]])
plt.ylim([min(p_LP,np.amin(p_t))-0.1,np.amax(p_t)+0.1])
plt.ylabel(r'$p$')
plt.xlabel(r'$t$')
p_s = FloatSlider(min=0, max=2, step=0.01, value=1.0)
p_LP_s = FloatSlider(min=0, max=2., step=0.01, value=0.481343)
Tperiods_s= IntSlider(min=1,max=10,value=1)
interact(plotPP,p=p_s,p_LP=p_LP_s,Tperiods=Tperiods_s)
2 ответа
Решение
Есть пара, которую вы можете осуществить в зависимости от того, что вы хотите сделать. Они легче всего приходят на ум, используя interactive
вместо interact
вместе с HBox
а также IPython.display.display
, Единственное, что касается этого решения, это то, что вам, возможно, придется начать перемещать силдеры, прежде чем вы увидите график.
from IPython.display import display
import matplotlib.pylab as plt
import numpy as np
from ipywidgets import interact,FloatSlider,IntSlider,interactive,HBox
%matplotlib inline
def plotPP(p,p_LP,Tperiods):
t=np.linspace(0,Tperiods*(np.pi*2),1000)
f = plt.figure(figsize=(1.618*6,6))
p_t = p*(1.0+np.cos(t))
plt.plot(t,p_t,'b',lw=2.0)
plt.axhline(p_LP,color='r',lw=2.0)
plt.xlim([t[0],t[-1]])
plt.ylim([min(p_LP,np.amin(p_t))-0.1,np.amax(p_t)+0.1])
plt.ylabel(r'$p$')
plt.xlabel(r'$t$')
p_s = FloatSlider(min=0, max=2, step=0.01, value=1.0)
p_LP_s = FloatSlider(min=0, max=2., step=0.01, value=0.481343)
Tperiods_s= IntSlider(min=1,max=10,value=1)
ip = interactive(plotPP,p=p_s,p_LP=p_LP_s,Tperiods=Tperiods_s)
display(HBox(ip.children[:-1]))#Show all controls
display(ip.children[-1])#Show the output
Пожалуйста, прокомментируйте ниже, если это неясно или не работает для вас.
Есть еще один способ разместить ползунки горизонтально и сразу увидеть график, не перемещая ползунки.
from IPython.display import display
import matplotlib.pylab as plt
import numpy as np
from ipywidgets import FloatSlider, IntSlider, interactive_output, HBox
%matplotlib inline
def plotPP(p,p_LP,Tperiods):
t=np.linspace(0,Tperiods*(np.pi*2),1000)
f = plt.figure(figsize=(1.618*6,6))
p_t = p*(1.0+np.cos(t))
plt.plot(t,p_t,'b',lw=2.0)
plt.axhline(p_LP,color='r',lw=2.0)
plt.xlim([t[0],t[-1]])
plt.ylim([min(p_LP,np.amin(p_t))-0.1,np.amax(p_t)+0.1])
plt.ylabel(r'$p$')
plt.xlabel(r'$t$')
p_s = FloatSlider(min=0, max=2, step=0.01, value=1.0)
p_LP_s = FloatSlider(min=0, max=2., step=0.01, value=0.481343)
Tperiods_s= IntSlider(min=1,max=10,value=1)
Разница здесь:
out = interactive_output(plotPP, {'p': p_s, 'p_LP': p_LP_s})
display(HBox([p_s, p_LP_s]), out)