如何导出含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
相关产品推荐
相关产品推荐

