当以html格式下载时,IPython交互式小部件不会以图形方式更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当以html格式下载时,IPython交互式小部件不会以图形方式更新相关的知识,希望对你有一定的参考价值。

我正在使用Jupyter Notebook并试图创建一个交互式情节。我真的很喜欢ipywidgets.interactive使用的简单,并且有能力在VBoxHBox中展示。我遇到的问题是,一旦我下载为html,ipywidgets.interactive没有更新我的情节。

这是我有的:

from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
import plotly.graph_objs as go
import plotly.offline as py
import numpy as np
from IPython.display import display

py.init_notebook_mode()

xs = np.linspace(0,6,100)
ys = np.sin(xs)

scatter = go.Scatter(
    x = xs,
    y = ys
)

data = [scatter]
layout = go.Layout(title='test')

fig = go.FigureWidget(data=data, layout=layout)
slider = widgets.FloatRangeSlider(
    min=1,
    max=6,
    step=.1,
    description='desc'
)

def update_b(b):
    fig.data[0].y = np.sin(xs+b)

vb = widgets.VBox((fig, interactive(update_b, b=(1, 6, .1))))
vb.layout.align_items='center'
# This displays it and allows it to be interactive, but only when I have it as .ipynb, 
# not when I download as html
display(vb) 

我保存为html的方式是: 1. Widgets> Save Notebook Widget State 2.来自cmd:jupyter nbconvert --to html test_plot.ipynb

我也做了以下启用widget extension

jupyter nbextension enable --py widgetsnbextension
Enabling notebook extension jupyter-js-widgets/extension...
      - Validating: ok

一切都是我得到的:enter image description here

事情是滑块是可移动的,但它不会更新图形。图形也可以通过缩放等方式进行操作。这让我相信我使用interactive的方式有问题。

有任何想法吗?

答案

不幸的是,这不起作用,将滑块与绘图链接的函数是用python编写的,并在python内核中执行,所以当你转换为静态html时,这个函数就不再存在了。

我不知道某种python到javascript转换器允许这些函数在没有python内核的情况下运行,尽管plotly的Dash似乎在这一行中做了一些事情(see this issue)。如果您可以安装服务器,您可以使用Voila或类似的东西,使笔记本看起来像一个网页。

以上是关于当以html格式下载时,IPython交互式小部件不会以图形方式更新的主要内容,如果未能解决你的问题,请参考以下文章

改进 IPython 小部件中 Pandas DataFrames 的 HTML 样式

Ipython Widgets(如何制作计时器)

InheritedWidget 混淆

IPython 安装方法

ipython的安装

linux安装IPython四种方法