我有这个 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 的新手,所以任何关于写得更好的建议将不胜感激。
也许不是一个合适的解决方案,但下面的代码对我有用并实现了我想要的
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)