You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何导出含Plotly交互式3D图的Jupyter单元格输出为HTML文件?

解决方案:保留Jupyter单元格中文本与交互式Plotly 3D图的HTML导出

方法1:用Jupyter内置导出(最省心)

  • 打开你的Notebook,点击顶部菜单栏的「File」→「Download as」→「HTML (.html)」
  • 导出的HTML会完整保留单元格里的print文本和Plotly 3D图的交互功能(拖拽旋转、缩放都能用),因为Jupyter会自动嵌入Plotly的JavaScript依赖,不需要额外配置。
  • 缺点:如果Notebook内容很多,导出的HTML文件体积会比较大,但胜在操作简单。

方法2:手动拼接HTML(适合自定义需求)

如果内置导出不符合你的场景,可以手动捕获文本和生成图表HTML,再按顺序拼接:

from IPython.display import display
import plotly.graph_objects as go
from io import StringIO
import sys
from plotly.offline import plot

# 先捕获print输出
old_stdout = sys.stdout
captured_text = StringIO()
sys.stdout = captured_text

# 运行你的文本和图表代码(替换成你实际的代码)
print("这是图表的第一部分解释文本")

# 创建示例3D散点图
fig = go.Figure(data=[go.Scatter3d(
    x=[1, 2, 3], y=[4, 5, 6], z=[7, 8, 9],
    mode='markers'
)])
# 生成图表的HTML片段(用CDN引入JS,避免体积过大)
fig_html = plot(fig, output_type='div', include_plotlyjs='cdn')

print("这是图表的第二部分解释文本")

# 恢复标准输出
sys.stdout = old_stdout
# 把换行转换成HTML的换行标签
formatted_text = captured_text.getvalue().replace('\n', '<br>')

# 拼接成完整HTML
final_html = f"""
<html>
<head>
<meta charset="utf-8">
</head>
<body>
{formatted_text}
{fig_html}
</body>
</html>
"""

# 保存到文件
with open('interactive_output.html', 'w', encoding='utf-8') as f:
    f.write(final_html)
  • 原理:用StringIO捕获print的文本,用plotly.offline.plot()生成可交互的图表HTML片段,最后把文本和图表按顺序拼起来,通过CDN加载Plotly的JS保证交互性。

方法3:用nbconvert命令行导出

  • 打开终端,运行命令:
jupyter nbconvert --to html your_notebook.ipynb
  • 效果和界面导出完全一致,还能通过参数自定义:比如加--execute确保代码重新运行生成最新输出,加--output custom_name.html指定导出文件名。

为什么%%capture会出错?

%%capture捕获的是Jupyter的输出对象(包括Plotly的图表对象),直接保存时无法正确把这些对象序列化为可交互的HTML代码,而上面的方法都是直接处理Plotly生成的HTML片段,避开了这个问题。

内容的提问来源于stack exchange,提问作者J_Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:42:26