由于display()而无法使用nbconvert执行笔记本

问题描述 投票:0回答:1

我有这个 Jupyter 笔记本,它可以生成一个选项卡式小部件。它运行良好并且小部件显示在 JupyterLab 中。代码如下。

test.ipynb

import pandas as pd
import ipywidgets as widgets
import plotly.express as px
from IPython.display import display

data = {'A': [1, 1],
        'B': [2, 3]}

df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data)

# Create tabs with line plots for each DataFrame
tab_contents = []
for df in [df1,df2]:
    fig = px.line(df)
    output = widgets.Output()
    with output:
        display(fig)
    tab_contents.append(output)

# Create tabs
my_tabs = widgets.Tab(children=tab_contents)

# Set titles for the tabs
for i in range(len(tab_contents)):
    my_tabs.set_title(i, "Tab " + str(i))

display(my_tabs)

我的目标是执行笔记本并最终将其转换为 HTML 文档。当我单击“重新启动内核并运行所有单元...”时,我可以在 JupyterLab 中运行笔记本。但是,我无法使用 nbconvert 执行笔记本。

jupyter nbconvert --to notebook --execute test.ipynb

bash 终端(尝试了 Windows 和 WSL)卡在

[NbConvertApp] Converting notebook test.ipynb to notebook

我发现有问题的线路是

display(fig)
。我也尝试过使用
fig.show()
但它仍然冻结。如果我将该行更改为
pass
,我就可以继续并获取消息

[NbConvertApp] Writing 9122 bytes to test.nbconvert.ipynb

这是怎么回事?我应该如何编写一个可以执行并导出为 HTML 的选项卡小部件?我的动机是我正在准备一份很长的报告,使用选项卡可以节省一些垂直空间。我是 Plotly 的新手,所以任何关于写得更好的建议将不胜感激。

jupyter-notebook widget plotly-python nbconvert
1个回答
0
投票

也许不是一个合适的解决方案,但下面的代码对我有用并实现了我想要的

import plotly.express as px
import pandas as pd
import plotly.graph_objects as go
from ipywidgets import widgets
from IPython.display import display

data = {'A': [1, 1],
        'B': [2, 3]}

df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data)

fig1 = px.line(df1, title="Graph 1")
fig2 = px.line(df2, title="Graph 2")

graph1 = go.FigureWidget(fig1)
graph2 = go.FigureWidget(fig2)

tab1 = widgets.VBox([graph1])
tab2 = widgets.VBox([graph2])

tab = widgets.Tab()
tab.children = [tab1, tab2]

tab.set_title(0, 'Graph 1')
tab.set_title(1, 'Graph 2')

display(tab)
© www.soinside.com 2019 - 2024. All rights reserved.