Интерактивный виджет IPython не обновляется при загрузке в формате HTML - PullRequest
0 голосов
/ 12 апреля 2019

Я использую Jupyter Notebook и пытаюсь создать интерактивный сюжет. Мне очень нравится, как просто использовать ipywidgets.interactive и иметь возможность выкладывать вещи в VBox или HBox. Проблема, с которой я столкнулся, заключается в том, что когда я загружаю в формате 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, что-то не так.

Есть идеи?

1 Ответ

0 голосов
/ 14 апреля 2019

К сожалению, это не работает таким образом, функция, которая связывает слайдер с графиком, написана на python и выполняется в ядре python, поэтому при преобразовании в статический html эта функция больше не существует.

Мне неизвестен какой-то переводчик с python на javascript, который позволяет выполнять функции такого рода без ядра python, хотя Dash с использованием plotly, похоже, что-то делает в этой строке ( смотри этовыпуск ).Если вы можете установить сервер, вы можете использовать Voila или что-то подобное, чтобы ноутбук выглядел как веб-страница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...