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.io的output_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:
找到调用
output_notebook的输入单元格,确认它已经执行过、并且有渲染后的输出单元格。检查该单元格的 Reveal.js 单元格类型(通常在单元格的
slideshow配置中设置,例如 cell tags 或 attributes 里的slide_type):- 如果单元格类型是"skip":这就是图表不显示的原因。
output_notebook单元格被幻灯片生成器忽略,其输出不会出现在幻灯片中,BokehJS 无法加载。 - 如果只是想让这个单元格不占一张幻灯片页面、但又不能让它被跳过:把单元格类型改为"notes"。"notes"类型会把单元格内容放进演讲者备注,单元格仍然会被渲染,BokehJS 得以加载,而幻灯片页面上看不到这个单元格。
- 如果单元格类型是"skip":这就是图表不显示的原因。
确认图表单元格本身使用
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_bokeh或conda 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),仅供参考