将 Jupyter 笔记本与情节导出为 html 离线时无法正确显示

Chr*_*sen 13 python plotly nbconvert jupyter-lab

我正在使用 Jupyter lab,即使我处于离线状态,jupyter lab 中的一切都可以正常工作。但是,每当我尝试将报告导出为 HTML 时。未渲​​染情节图。如果我打开互联网连接,绘图就会呈现出来,就好了。

这是示例代码:

import pandas as pd
import numpy as np
import plotly.express as px

df = pd.DataFrame(np.random.randn(100,4), columns='A B C D'.split())

px.scatter(df, x='A',y='B')
Run Code Online (Sandbox Code Playgroud)

我已尝试按照此处显示的故障排除指南进行操作。此外,我尝试在新环境中安装。

如果我使用以下内容:

import plotly.io as pio
pio.renderers.default = "jupyterlab"
Run Code Online (Sandbox Code Playgroud)

离线 HTML 包含静态图,但我非常希望启用交互性。我注意到这些文件的大小不同,静态页面只有 700 Kb 左右,而当我尝试将它们保存为交互式时,它们大约为 4 Mb。

这在 Jupyter 实验室不可能吗?或者我错过了什么

mc5*_*c51 23

如果你想在离线状态下也能进行交互,你需要将plotly.js添加到输出html中。你可以这样实现:

import plotly.io as pio
pio.renderers.default='notebook'
Run Code Online (Sandbox Code Playgroud)

实际上,这应该在 JupyterLab 上默认完成(你可以看出文件大小增加了。在你的情况下它将> 4MB)。因此,如果这不起作用,我怀疑存在错误。我想我也经历过类似的事情。这是使用您的示例并将其导出为 html 时的浏览器控制台输出:

屏幕截图显示加载绘图时出现浏览器错误

由于某种原因,包含的内容plotly.js似乎取决于由于某种原因包含在 html 导出中的require.js内容。相反,您的页面将尝试从 CDN 加载它,当您离线时,该 CDN 会失败(如屏幕截图所示)。

现在,您可以做的是手动包含本地版本的require.js. 在这里获取一份副本。然后,在您的笔记本顶部添加以下内容:

%%HTML
<script src="require.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后,将笔记本导出为 html。确保它与require.js您之前下载的文件位于同一文件夹中,然后在浏览器中打开它。
控制台中不应再出现错误消息,并且您的图表应以交互方式显示并工作:

显示使用解决方案工作的绘图图表的屏幕截图

/e:如果您想共享您的笔记本,这可能不是最佳选择,因为它还要求您分发脚本require.js。您还可以直接将整个脚本包含在笔记本中。只需将%%js单元格魔术放在代码单元格的顶部,然后将require.js您下载的文件的内容粘贴到下面即可。