2017-08-01 27 views
1

我想解決如何在兩個(或多個)列中顯示ipywidgets的滑塊。有沒有人有一個例子如何做到這一點?我的代碼(在jupyter筆記本)現在是這樣的:ipywidgets:如何組織兩列滑塊

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) 

並顯示在另一個頂部的三個滑塊之一:enter image description here

回答

1

有幾個你可以把這事辦成這取決於你想做。他們想到的最簡單的方法是使用interactive而不是interact以及HBoxIPython.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 

請在下面評論,如果這不清楚或不適合你。

+0

完美的作品!但是我想知道是否還有一種方法可以使用'interact'方法,這樣就不需要使用'display' .. – Ohm

+1

好聽。不使用'display'命令就可以做到這一點,最終它會變得更加複雜,並且會涉及到你可以閱讀的有關[here]的鏈接和/或'observe'命令(http://ipywidgets.readthedocs.io /en/stable/examples/Widget%20Events.html#Linking-traitlets-attributes-in-the-kernel)。 –