如何确保每次打开Jupyter notebook时多个Plotly图表渲染效果一致
解决方案
方案1:修改自动运行JS逻辑(适配内核已运行场景+保留代码折叠状态)
把你原来首单元格的%%html代码替换为以下内容,这段代码会在每次页面加载完成后,等待Jupyter内核连接就绪后自动执行所有单元格,执行完成后主动触发Codefolding扩展的初始化,恢复代码单元的折叠状态:
%%html <script> // 等待Jupyter页面完全加载 $(document).on('ready', function() { // 轮询等待内核连接完成,兼容已启动和新启动的内核 const checkKernelReady = setInterval(() => { if (Jupyter.notebook.kernel && Jupyter.notebook.kernel.is_connected()) { clearInterval(checkKernelReady); // 执行所有单元格 Jupyter.notebook.execute_all_cells(); // 延迟等待单元格执行完成后恢复折叠状态 setTimeout(() => { if (Jupyter.notebook.config.data.codefolding_enabled) { Jupyter.notebook.get_cells().forEach(cell => { if (cell.metadata.code_folding) { cell.code_mirror.foldCode(cell.metadata.code_folding); } }); } }, 500); } }, 100); }); </script>
方案2:提前嵌入Plotly渲染依赖,避免内核已运行时前端依赖缺失
在所有绘图代码的最开头添加以下配置,强制Plotly把渲染所需的JS资源直接嵌入到每个图表的输出中,无需依赖内核动态加载:
import plotly.io as pio # 经典Jupyter环境配置,将JS资源嵌入输出,支持离线渲染 pio.renderers.default = "notebook_connected" # 若需要打开笔记本无需运行内核也能看交互式图表,可改用以下配置 # pio.renderers.default = "iframe"
方案3:解决配置冲突(可选)
如果你的Initialization cells配置和自动运行JS有冲突,可以暂时关闭Initialization cells属性,仅用上述修改后的JS代码实现自动运行,避免重复执行逻辑冲突。
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

