Bokeh notebook 制作 Reveal.js 幻灯片时图表不显示,如何检查 output_notebook 单元格?
2026/9/15 14:32:21 网站建设 项目流程

Bokeh notebook 制作 Reveal.js 幻灯片时图表不显示,如何检查 output_notebook 单元格?

【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh

用 Jupyter notebook 配合 Reveal.js 把单元格生成为幻灯片时,一个常见的故障是:幻灯片里其他单元格内容正常,唯独 Bokeh 图表不显示。Bokeh 文档在 Jupyter 用户指南 的 "Notebook slides" 一节明确指出了这类问题的根因和检查方法:幻灯片生成器会跳过标记为 "skip" 的单元格,而output_notebook单元格的渲染输出是 BokehJS 库加载的前提——如果这个单元格被跳过,BokehJS 不会加载,幻灯片中的 Bokeh 图表就不会显示。本文说明如何定位并检查这个单元格。

问题成因:output_notebook 的渲染输出负责加载 BokehJS

在经典 Jupyter notebook 中内联显示 Bokeh 图表的标准做法是:在代码中调用bokeh.iooutput_notebook(替代或补充output_file),然后调用show,图表会显示在下一个输出单元格中,不需要 Bokeh server,也不要求其他修改。

在 Reveal.js 幻灯片场景下,这条链路易断掉的地方只有一个:Reveal.js 生成幻灯片时会忽略单元格类型(cell type)设为"skip"的单元格。output_notebook单元格的渲染输出正是用来确保 BokehJS 库加载的;一旦该单元格被跳过,BokehJS 不会加载,Bokeh 图表就全部无法显示。也就是说,问题不在图表代码本身,而在于幻灯片生成配置中output_notebook单元格的单元格类型。

另外注意一个适用边界:Reveal.js 幻灯片中只能包含 standalone(非 server)的 Bokeh 图表。Bokeh server 应用嵌入 notebook 需要额外的依赖和网络配置(参见 Jupyter 用户指南 的 "Required Dependencies" 一节),不适用于本场景,也不要在幻灯片里依赖它。

检查与修复 output_notebook 单元格

按以下顺序检查你的 notebook:

  1. 找到调用output_notebook的输入单元格,确认它已经执行过、并且有渲染后的输出单元格。

  2. 检查该单元格的 Reveal.js 单元格类型(通常在单元格的slideshow配置中设置,例如 cell tags 或 attributes 里的slide_type):

    • 如果单元格类型是"skip":这就是图表不显示的原因。output_notebook单元格被幻灯片生成器忽略,其输出不会出现在幻灯片中,BokehJS 无法加载。
    • 如果只是想让这个单元格不占一张幻灯片页面、但又不能让它被跳过:把单元格类型改为"notes""notes"类型会把单元格内容放进演讲者备注,单元格仍然会被渲染,BokehJS 得以加载,而幻灯片页面上看不到这个单元格。
  3. 确认图表单元格本身使用show显示图表,而不是依赖output_file。典型的最小代码结构如下(具体数据源换成你自己的):

from bokeh.io import output_notebook, show from bokeh.plotting import figure output_notebook() # 这个单元格不要设为 skip p = figure() # ... 添加你的数据与 glyph ... show(p)

如果一个输出单元格需要显示多个图表,在同一个输入单元格中多次调用show即可,图表会按调用顺序依次显示。

修复的核心动作只有一处:把output_notebook单元格的类型从"skip"改为"notes"(或任何不会被跳过的类型)。

验证图表是否恢复显示

验证方式就是重新生成幻灯片并查看渲染结果:

  • 重新用 Reveal.js 生成幻灯片,在生成的幻灯片页面中检查原本空白的位置:Bokeh 图表应当正常渲染出来,说明 BokehJS 已随output_notebook单元格的输出加载成功。
  • 如果按上述方法把单元格类型设为"notes"或保留为可见幻灯片后图表仍不显示,再确认output_notebook单元格确实在 notebook 中被执行过且带有渲染输出——未执行的单元格没有输出,也就无法完成 BokehJS 的加载。

限制说明

  • 幻灯片中仅支持 standalone Bokeh 图表;server 应用不在幻灯片支持范围内。
  • notebook_handle=True提供的 notebook handle 功能(配合push_notebook原地更新图表)目前只支持经典 Jupyter notebook,未实现在 JupyterLab 中;它解决的是"更新已显示图表"的问题,与幻灯片图表不显示无关,本文场景不需要它。
  • 若使用 JupyterLab 而非经典 notebook 进行开发调试,需要 JupyterLab 3.0 及以上版本,并通过pip install jupyter_bokehconda install jupyter_bokeh安装jupyter_bokeh扩展,之后用法与经典 notebook 相同。

以上检查路径与判断依据均来自 Jupyter 用户指南的 Notebook slides 一节。

【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询