ipywidgets:如何在两列中组织滑块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

它将三个滑块一个显示在另一个上面:enter image description here

答案

有几个你可以根据你想做的事情来解决这个问题。最简单的想法是使用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

如果不清楚或不适合您,请在下面评论。

另一答案

还有另一种方法可以水平放置滑块并立即查看图形而无需移动滑块。

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)

以上是关于ipywidgets:如何在两列中组织滑块的主要内容,如果未能解决你的问题,请参考以下文章

如何选择在两列中具有相同值集的行,从而连接第三列中的值?

如何使用 python 在两列中扩展具有日期范围的数据框?

SQLAlchemy如何检查值是否在两列中的值之间?

ionic 2 angular 2 在两列中分布绑定记录

Android:在两列中显示信息,而不是 BaseAdapter 的一列

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘