【问题标题】:bqplot: ipython widgets not being renderedbqplot:ipython 小部件未呈现
【发布时间】:2017-06-26 20:04:42
【问题描述】:

我正在尝试使用 bqplot 在 jupyter notebook 中绘制一些图表以及一些 ipywidgets。如this issue 中所述,我想将小部件水平渲染到与我的绘图相邻的位置,但我无法让小部件显示在我的 jupyter 笔记本中。

我的代码如下-

from bqplot import pyplot as plt
import ipywidgets as widgets
from pandas import DataFrame

class AdderDOEProblem_PlotUtils:
    def __init__(self, parseutils):
        self.data = DataFrame({'timestamps': parseutils.getTimestampValues(),
                            'Adder.sum': parseutils.getValues('Adder.sum'),
                            'Adder.a': parseutils.getValues('desvar_a.a'),
                            'Adder.b': parseutils.getValues('desvar_b.b')})
        # step size
        self.Adder_a__step = 0.1
        self.Adder_b__step = 0.1

        # axes configuration
        x_axis_values = self.data['Adder.a']
        y_axis_values = self.data['Adder.sum']

        self.fig = plt.figure(title='AdderDOEProblem')
        self.p = plt.plot(x_axis_values, y_axis_values)

        w_a_slider = widgets.FloatSlider(value=0, min=0, max=1, step=self.Adder_a__step, description='Adder.a')
        w_b_slider = widgets.FloatSlider(value=0, min=0, max=1, step=self.Adder_b__step, description='Adder.b')
        self.widgets_list = [w_a_slider, w_b_slider]

    def update (self, change):
        # Placeholder logic for testing 
        self.p.y = [i+1 for i in self.p.y]

    def plot (self):
        plt.show()
        for w in self.widgets_list:
            w.observe(self.update, 'value')
        self.update(None)
        widgets.HBox([widgets.VBox(self.widgets_list), self.fig])

当我在笔记本中运行它时,我得到以下输出 -

我已经尝试了许多线程中建议的以下命令(但没有运气)-

jupyter nbextension enable --py widgetsnbextension

我错过了什么?

附:包的版本如下 -
jupyter - 1.0.0
ipython - 5.1.0
ipywidgets - 5.2.2
bqplot - 0.8.4

【问题讨论】:

    标签: jupyter-notebook ipywidgets bqplot


    【解决方案1】:

    在您的绘图函数中,您必须返回正在创建的HBox。这就是为什么它没有被显示。显示的图形来自plt.show 命令,该命令仅显示当前上下文中的Figure。请注意,您不再需要plt.show()。所以绘图函数看起来像,

    def plot (self):
        for w in self.widgets_list:
            w.observe(self.update, 'value')
        self.update(None)
        return widgets.HBox([widgets.VBox(self.widgets_list), self.fig])
    

    【讨论】:

    • 您可能需要最后一次显示调用。 from IPython.display import display; a = AdderDOEProblem_PlotUtils(); box = a.plot(); display(box).
    • 另外,我想如果您的滑块旨在控制self.plot,他们将通过update() 充分做到这一点。也就是说,我不确定您是否需要在 plot() 中使用 update()
    猜你喜欢
    • 2017-09-11
    • 2021-12-02
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2021-07-11
    • 2012-10-19
    • 2022-10-21
    • 2017-10-27
    相关资源
    最近更新 更多