Ipywidgets(Vbox)未显示在Jupyter笔记本上

3
我遇到了这个错误。
A Jupyter widget could not be displayed because the widget state could not be found. This could happen if the kernel storing the widget is no longer available, or if the widget state was not saved in the notebook. You may be able to create the widget by running the appropriate cells.

当我运行以下代码时:

import plotly.graph_objs as go
import plotly.offline as py

import pandas as pd
import numpy as np
from ipywidgets import interactive, HBox, VBox

py.init_notebook_mode()

df = pd.read_csv('https://raw.githubusercontent.com/jonmmease/plotly_ipywidget_notebooks/master/notebooks/data/cars/cars.csv')

f = go.FigureWidget([go.Scatter(y = df['City mpg'], x = df['City mpg'], mode = 'markers')])
scatter = f.data[0]
N = len(df)
scatter.x = scatter.x + np.random.rand(N)/10 *(df['City mpg'].max() - df['City mpg'].min())
scatter.y = scatter.y + np.random.rand(N)/10 *(df['City mpg'].max() - df['City mpg'].min())
scatter.marker.opacity = 0.5

def update_axes(xaxis, yaxis):
    scatter = f.data[0]
    scatter.x = df[xaxis]
    scatter.y = df[yaxis]
    with f.batch_update():
        f.layout.xaxis.title = xaxis
        f.layout.yaxis.title = yaxis
        scatter.x = scatter.x + np.random.rand(N)/10 *(df[xaxis].max() - df[xaxis].min())
        scatter.y = scatter.y + np.random.rand(N)/10 *(df[yaxis].max() - df[yaxis].min())

axis_dropdowns = interactive(update_axes, yaxis = df.select_dtypes('int64').columns, xaxis = df.select_dtypes('int64').columns)

# Create a table FigureWidget that updates on selection from points in the scatter plot of f
t = go.FigureWidget([go.Table(
    header=dict(values=['ID','Classification','Driveline','Hybrid'],
                fill = dict(color='#C2D4FF'),
                align = ['left'] * 5),
    cells=dict(values=[df[col] for col in ['ID','Classification','Driveline','Hybrid']],
               fill = dict(color='#F5F8FF'),
               align = ['left'] * 5))])

def selection_fn(trace,points,selector):
    t.data[0].cells.values = [df.loc[points.point_inds][col] for col in ['ID','Classification','Driveline','Hybrid']]

scatter.on_selection(selection_fn)

# Put everything together
VBox((HBox(axis_dropdowns.children),f,t))

ft只有在我运行f.show()t.show()时才会显示。

然而,当我运行以下代码时:

import ipywidgets as widgets
from IPython.display import display

button = widgets.Button(description='Hello')
display(button)

小部件正常显示。我已经阅读了在线解决方案并尝试过:
jupyter nbextension enable --py widgetsnbextension

并且

jupyter labextension install @jupyter-widgets/jupyterlab-manager

当我进行检查时:

jupyter nbextension list

一切看起来都很好:

Known nbextensions:
  config dir: /home/hajar/.jupyter/nbconfig
    notebook section
      jupyter-js-widgets/extension  enabled 
      - Validating: OK
  config dir: /usr/local/etc/jupyter/nbconfig
    notebook section
      jupyter-js-widgets/extension  enabled 
      - Validating: OK
    tree section
      ipyparallel/main  enabled 
      - Validating: problems found:
        - require?  X ipyparallel/main
  config dir: /etc/jupyter/nbconfig
    notebook section
      jupyter-js-widgets/extension  enabled 
      - Validating: OK

我有点困惑为什么它没有显示来自Vbox的结果。我正在使用Jupyter笔记本。

版本列表:

jupyter core     : 4.6.3
jupyter-notebook : 6.0.3
qtconsole        : 5.0.1
ipython          : 7.13.0
ipykernel        : 5.2.0
jupyter client   : 6.1.2
jupyter lab      : 3.0.9
nbconvert        : 5.6.1
ipywidgets       : 7.0.0
nbformat         : 5.0.4
traitlets        : 4.3.3
2个回答

3

已解决 - 用于呈现FigureWidget的plotlywidgets未正确安装。

我使用了jupyter nbextension install --py plotlywidget --user 然后执行了jupyter nbextension enable plotlywidget --user --py


plotlywidgt扩展仅适用于旧版的plotly(例如版本4.14.3)。它已经在新版的plotly(例如版本5.x)中被删除。 - Michael Tiemann

0
这不是一个关于plotlyVBox的问题,而是关于ipywidgets的一般性问题。 正如在IPython Notebook ipywidgets does not show中所解释的那样。
   jupyter nbextension enable --py widgetsnbextension

重新启动Jupyter对我来说解决了这个问题。
如果它能正常工作,你可以用这个简短的例子来测试一下。
from ipywidgets import Button, VBox
VBox([Button(description='button 1')])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接