【问题标题】:How to add box to ipywidgets interactive?如何将框添加到 ipywidgets 交互?
【发布时间】:2021-03-30 11:27:16
【问题描述】:

找到此代码here

%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np

def f(m, b):
    plt.figure(2)
    x = np.linspace(-10, 10, num=1000)
    plt.plot(x, m * x + b)
    plt.ylim(-5, 5)
    plt.show()

interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot

它创建了一个可以交互且不会闪烁的情节。我查看了文档,但我不知道如何添加一个框来控制这个情节?例如,我将如何使用这个 hbox 来更新情节?

items = [widgets.FloatSlider(value=5, min=0, max=10, step=0.01,
                             orientation='vertical', layout=Layout(width="15px"), readout_format='.0f') 
         for i in range(5)]
hbox = widgets.HBox(items)
hbox

如果您知道答案,请详细说明并解释为什么会这样。 我尝试从observe 调用函数f,它只是创建了新的不相关图。 当从交互式调用相同的函数时,它的效果非常好。

【问题讨论】:

    标签: matplotlib jupyter-notebook ipywidgets


    【解决方案1】:

    下面是关于interactive 发生了什么的粗略想法,也许您可​​以根据自己的情况进行调整?

    
    %matplotlib inline
    import ipywidgets as ipwy
    import matplotlib.pyplot as plt
    import numpy as np
    from IPython.display import clear_output
    
    m_widg = ipwy.FloatSlider(min=-2, max=2, step=0.5)
    b_widg = ipwy.FloatSlider(min=-3, max=3, step=0.5)
    out = ipwy.Output(layout = ipwy.Layout(height='350px'))
    display(ipwy.VBox(children=(m_widg, b_widg, out)))
    
    
    def f(*args):
        out.clear_output()
        m = m_widg.value
        b = b_widg.value
        plt.figure(2)
        x = np.linspace(-10, 10, num=1000)
        plt.plot(x, m * x + b)
        plt.ylim(-5, 5)
        with out:
            clear_output()
            plt.show()
        
    m_widg.observe(f, names=['value'])
    b_widg.observe(f, names=['value'])
    

    【讨论】:

    • 谢谢,但不,这会闪烁。
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多