如何在Jupyter Notebook中保存Plotly离线生成的图表?
可以实现将Plotly图表保存在Notebook内部,下次打开无需重新运行也能正常查看,具体操作方法如下:
问题原因
默认情况下Plotly的交互式图表依赖在线的JS资源渲染,如果没有配置离线嵌入模式,保存Notebook时不会把渲染所需的资源写入文件,断网或重新打开时就会出现图表无法显示的问题。
解决方案
方法1:适配你当前的离线iplot写法
你现有代码缺少init_notebook_mode的初始化调用,需要补充配置指定不使用在线资源,修改后的代码如下:
import plotly.graph_objects as go from plotly.offline import init_notebook_mode, iplot from plotly.subplots import make_subplots # 核心配置:将Plotly依赖的JS资源直接嵌入到Notebook内部,不调用在线资源 init_notebook_mode(connected=False) fig=go.Figure() fig.add_scatter(x=differenced_data.index[-1*n_steps:], y=test.values,name='test data',mode='lines+markers',marker=dict(color='green',size=5)) iplot(fig)
运行代码后保存Notebook,所有渲染需要的资源和图表数据都会存储在ipynb文件中,下次打开不需要网络也能正常显示。
方法2:新版Plotly(v4.0及以上)更简洁的写法
当前主流的新版Plotly已经不需要手动导入离线模块,直接调用fig.show()默认就会自动内嵌资源,代码更简洁:
import plotly.graph_objects as go from plotly.subplots import make_subplots fig=go.Figure() fig.add_scatter(x=differenced_data.index[-1*n_steps:], y=test.values,name='test data',mode='lines+markers',marker=dict(color='green',size=5)) # 直接调用show方法即可,默认会把图表完整嵌入Notebook fig.show()
注意事项
- 保存Notebook的时候,一定要等图表完全渲染出来之后再点保存,避免资源没有完全写入到文件里
- 如果你使用的是Jupyter Lab,需要先安装Plotly对应的扩展:运行
pip install jupyterlab-plotly命令,安装完成后重启Jupyter Lab即可正常内嵌 - 不要清空Notebook的输出单元格,清空之后内嵌的图表资源也会被同步删除,下次打开就无法显示了
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

