2017-08-01 30 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)。 –