Bokeh 3.4.0 版本全解析:浮动 UI、零延迟交互与数学文本渲染的新里程碑

发布时间:2026/9/14 8:33:48

Bokeh 3.4.0 版本全解析:浮动 UI、零延迟交互与数学文本渲染的新里程碑 Bokeh 3.4.0 版本全解析浮动 UI、零延迟交互与数学文本渲染的新里程碑【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh导读Bokeh 3.4.02024 年 3 月发布是 Bokeh 项目的一个 minor milestone围绕更自由的界面布局、更顺滑的交互体验、更丰富的文本与数据表现力三条主线带来了浮动 UI 元素与节点定位系统、零延迟 tap 手势、xor 选择模式、TeXGlyph/MathMLGlyph数学文本字形、CategoricalSlider等一大批新特性。本文以官方发布说明为骨架结合本仓库源码逐一展开这些能力的用法、底层实现与迁移注意事项帮助你快速掌握 3.4.0 的核心增量并平滑完成从旧 API 的升级。一、版本定位与更新总览根据发布说明docs/bokeh/source/docs/releases/3.4.0.rstBokeh3.4.0是一次 minor milestone 更新新增能力可归纳为以下几个方向方向代表性新特性UI 与布局浮动 UI 元素Dialog与节点定位系统交互与选择零延迟 tap、xor 选择模式、选择反转、Tool.visible文本与标注Label/Title的padding、border_radius、可旋转编辑TeXGlyph/MathMLGlyph控件与数据CategoricalSlider、PaletteSelect由ColorMap更名、数据列默认值工程与平台strict mode、ES2020 目标、CSS-safe 唯一 DOM id、WebGL/SVG 大量修复下面按主题逐一展开所有配置项与默认值均以仓库源码为准。二、浮动 UI 元素与节点定位系统PR #135381. 核心模型Dialog发布说明中floating UI elements (e.g.Dialog) and node positioning system对应源码中的Dialog模型它是一个floating, movable and resizable container for UI elements可浮动、可移动、可缩放的 UI 容器从UIElement派生。注意官方在模型 docstring 中明确提示该模型及其所有属性目前是 experimental未来可能调整。Dialog的核心属性如下均可在 dialogs.py 中查到默认值title对话框标题可以是纯文本字符串、DOMNode、UIElement或布局对象content必填对话框内容同样支持字符串 /DOMNode/UIElement/ 布局pinnable True是否允许钉住对话框被钉住的对话框始终位于其他对话框之上钉住一个会取消其他对话框的钉住状态collapsible True是否允许折叠折叠后只显示标题在标题上滚动即可折叠便于让开下方 UIminimizable True是否允许最小化最小化会将对话框折叠并移动到视口左下角的最小化区域maximizable True是否允许最大化最大化后覆盖整个视口多个对话框可同时最大化但只有一个位于顶层closable True是否允许关闭close_action决定关闭后的行为取值为hide从 DOM 移除但保留视图与状态可再次打开或destroy销毁视图与状态重新打开需重建默认destroyresizable all缩放方向枚举类型Resizablemovable both移动方向枚举类型Movablesymmetric False缩放一个边/角时是否同步影响对边/对角top_limit/bottom_limit/left_limit/right_limit可选移动/缩放边界Node实例共同构成对话框移动与缩放的包围盒。一个典型用法是把Dialog与Button的点击回调结合动态打开/关闭from bokeh.io import show from bokeh.models import Button, Dialog, Div from bokeh.layouts import column dialog Dialog(title提示, contentDiv(textb这是一个浮动对话框/b), closableTrue) button Button(label打开对话框) button.js_on_click(dialog.js_open()) # 打开对话框 show(column(button, dialog))2. 节点定位系统Node/Coordinatenode positioning system 的落地是Node与Coordinate两个模型。Coordinate是Model的子类Node继承自Coordinate用于把 UI 元素/标注的锚点绑定到绘图帧的某个位置例如与某条轴范围或坐标关联从而让浮动元素跟随数据位置移动。它与Dialog的top_limit等属性配合可以实现对话框只能在绘图区域内移动/缩放之类的约束。三、交互升级零延迟 tap 与全新的选择模式PR #12831、#135451. 零延迟 tap 手势发布说明指出 3.4.0 Redesigned UI gesture handling and added support for zero latency tap。手势处理管线被重新设计tap 不再等待判断是否拖拽的防抖延迟点击即可立即触发显著降低了TapTool等工具的响应延迟适合对点击反馈敏感的仪表盘场景。2. xor 选择模式与选择反转选择工具的mode属性支持的选择模式枚举定义在 enums.pytype RegionSelectionModeType Literal[replace, append, intersect, subtract, xor] type SelectionModeType Literal[RegionSelectionModeType, toggle]即replace替换、append追加、intersect取交集、subtract减去、xor异或以及toggle切换。3.4.0 新增了xor模式并支持选择反转invert selection仅对点选择生效。以TapTool为例tools.pyfrom bokeh.models import TapTool tool TapTool(modexor) # 点击已选中的点会取消其选中实现点选/取消发布说明特别提到 3.4.0 将TapTool的默认选择模式改为xor从而允许通过再次点击来取消选中。需要说明的是从当前仓库源码tools.py看TapTool.mode的默认值写为toggle这提示后续版本可能对默认值又做了调整如果你依赖点击取消选中的行为建议在代码中显式指定modexor而非依赖默认值。3. 工具显隐控制Tool.visible3.4.0 为工具基类新增了visible Bool(defaultTrue)属性tools.py可以在不销毁工具对象的前提下将其从工具栏隐藏同时InspectTool.toggleable被标记为弃用。典型用法from bokeh.models import HoverTool hover HoverTool(visibleFalse) # 默认隐藏需要时再置 True四、Label与Title的视觉增强PR #128251.padding与border_radius3.4.0 为Label和Title增加了padding、border_radius等样式属性源码位于 annotations/labels.pyfrom bokeh.models import Label label Label( x10, y80, text带背景的标签, background_fill_colornavy, background_fill_alpha0.3, border_line_colorblack, padding10, # 背景内边距 border_radius5, # 背景圆角 )这些属性与已有的background_fill_*、border_line_*视觉属性配合可以快速做出胶囊/圆角卡片式的标签外观而不再需要手工拼接矩形与文本。2.editableTrue时支持旋转交互同一 PR 还让Label在editableTrue时支持旋转用户在浏览器中拖动旋转手柄即可改变标签角度适用于地图标注、示意图等需要现场微调角度的场景。五、数学文本字形TeXGlyph与MathMLGlyphPR #136123.4.0 新增了基于数学排版的内容字形定义于 glyphs.pyMathTextGlyph抽象基类继承自TextTeXGlyph使用 LaTeX 记法渲染数学内容底层依赖 MathJax官方 docstring 提示 MathJax 只支持数学模式宏不支持文本模式宏与标准 TeX/LaTeX 存在差异MathMLGlyph使用 MathML 记法渲染。两者都继承Text的全部文本属性字体、颜色、背景填充、边框、hatch 等可像普通文本字形一样放在figure上from bokeh.models import TeXGlyph p figure(width400, height200) p.add_glyph(TeXGlyph( x0.5, y0.5, textr$E mc^2$, text_font_size24px, ))这填补了此前只能通过Label/MathText注解渲染公式、而无法把公式作为数据字形参与缩放/点击的空白。六、新控件与更名1.CategoricalSliderPR #13489新增的分类滑条源码在 widgets/sliders.py用于从一组离散取值中选择from bokeh.models import CategoricalSlider slider CategoricalSlider( categories[低, 中, 高], value中, )属性说明categories必填Seq(String)可选的分类集合value必填String初始或当前选中值value_throttled只读必填节流后的选中值用于只在滑块停止时触发回调的场景与数值Slider的value_throttled语义一致参见同文件 sliders.py。2.ColorMap更名为PaletteSelectPR #13537颜色映射控件ColorMap在 3.4.0 中更名为PaletteSelectwidgets/inputs.py旧名称不再可用。若你的代码中使用过ColorMap升级时需改为from bokeh.models import PaletteSelect七、数据层增强1.ColumnDataSource列默认值与编辑工具PR #135183.4.0 为ColumnDataSource增加了列默认值支持并与编辑工具如PointDrawTool、BoxEditTool、PolyDrawTool等打通当用户通过编辑工具新增数据点时未显式提供的列会回落到默认值避免因缺列导致新增点渲染失败或报错。这对于带分类/时间戳列的增量编辑场景非常实用。2. 非视觉字形数据属性覆盖PR #13554支持对字形的非视觉数据属性进行覆盖non-visual glyph data property overrides例如在CDSView或多数据源场景下为部分字形单独指定数据列而不影响其视觉样式进一步解耦数据与样式。3.StaticLayoutProvider支持字符串节点PR #13618图布局提供器StaticLayoutProvider在 3.4.0 起支持以字符串作为节点标识来提供坐标此前只能使用整数索引。现在可以这样布局图from bokeh.models import StaticLayoutProvider provider StaticLayoutProvider( graph_layout{ A: (0, 0), B: (1, 1), C: (2, 0), }, )字符串键与GraphRenderer的节点/边数据列如index列存字符串直接对应大大提高了图数据与外部系统如社交网络、知识图谱对接的便利性。4.ScaleBar自定义计量单位PR #13625比例尺标注ScaleBar新增自定义单位支持unit默认mrange属性的单位字符串例如km、ft、midimensional计量维度模型默认MetricLength实例定义单位体系当unit不属于该维度时会触发NON_MATCHING_SCALE_BAR_UNIT校验错误见 legends.pyrange默认auto显示比例所依据的坐标轴范围auto时根据方向自动选择默认的 x/y 范围orientation水平或垂直location默认top_right、x_units/y_units默认data、anchor默认auto控制比例尺在绘图帧内的摆放与锚定length_sizingadaptive/exact与bar_length默认0.2控制比例条长度的自适应取整或精确取值。例如在地图场景中显示5 公里from bokeh.models import ScaleBar scale_bar ScaleBar( unitkm, dimensional__import__(bokeh.core.property.vectorization, fromlist[]), # 示意 orientationhorizontal, locationbottom_right, )dimensional通常由 bokeh 提供的单位模型直接传入这里仅示意字段结构实际使用时请参考 ug_styling_plots 用户手册中 ScaleBar 相关章节。5.DataTable单元格格式化样式增强PR #136853.4.0 改进了DataTable单元格格式化器的样式支持例如对数值格式、日期格式列可以配置字体、对齐等视觉属性使表格与整体主题更统一。八、工程与平台级改进1. 开发资源默认值PR #13042BOKEH_DEVtrue现在默认启用server development resources开发服务器资源开发者在修改 bokehjs 源码后无需手工切换资源模式即可获得带源码映射的开发构建调试体验更顺滑。2. bokehjs 代码质量与构建目标strict modebokehjs 的 bundle 全面启用 JavaScriptuse strict;PR #13523更早暴露隐式全局变量等隐患ES2020 目标bokehjs 构建从 ES2017 迁移到 ES2020PR #13565可安全使用可选链、空值合并等现代语法统一 API 处理bokehjs 各 API 统一了普通对象与Map对象的处理PR #13696唯一 CSS-safe 标识符所有 Bokeh 生成的 DOM 元素改用全局唯一且 CSS-safe 的 idPR #13636避免多个图表共存时的 id 冲突与 CSS 选择器转义问题bokeh/bokehjs元包依赖恢复bokehjs 的元包依赖被恢复PR #13715npm install bokeh/bokehjs可正常拉齐依赖。3. Unicode 名称占位符PR #13723HoverTool等使用的占位符语法支持 Unicode 名称例如数据列名为温度(°C)时可直接写温度(°C)或使用 Unicode 别名不再受 ASCII 限制。4. 后端修复WebGL 后端多项 bug 修复PR #13482、#13649、#13651、#13684覆盖大数量级点/线渲染与混合问题SVG 后端多项 bug 修复PR #13363、#13640改善矢量导出的一致性。九、弃用与迁移指南figure.circle(size...)弃用PR #13283figure.circle(size10)形式被弃用统一改用figure.scatter(size10)。在 glyph_api.py 中可以看到兼容逻辑调用circle()且传入size时会触发deprecated((3, 4, 0), ...)警告并自动转发到scatter()若同时传入size与radius则抛出ValueError。迁移方式# 旧写法3.4.0 起弃用 p.circle(x, y, size10, colorred) # 新写法 p.scatter(x, y, size10, colorred)其他迁移注意点汇总ColorMap→PaletteSelectInspectTool.toggleable→ 使用Tool.visible依赖TapTool默认点击取消选中行为的代码建议显式TapTool(modexor)Dialog及其定位系统为 experimental生产使用前请关注后续版本兼容性。十、总结Bokeh 3.4.0 是一次交互体验 表现力 工程化并重的版本Dialog与节点定位让仪表盘可以像桌面应用一样管理浮动面板xor 选择模式与零延迟 tap 让选择交互更跟手TeXGlyph/MathMLGlyph让数学内容直接成为可缩放、可拾取的数据字形CategoricalSlider、PaletteSelect、ScaleBar自定义单位与DataTable样式增强则补齐了高频业务场景的细节。同时strict mode、ES2020、唯一 DOM id 等工程改进为 bokehjs 后续迭代打下更稳的基础。升级到 3.4.0 时重点核对circle(size...)、ColorMap与InspectTool.toggleable三处弃用点即可平稳过渡。【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/14 8:28:48

在 awesome-codex-skills 中通过 Rube MCP 自动化 Accelo 业务操作

在 awesome-codex-skills 中通过 Rube MCP 自动化 Accelo 业务操作 【免费下载链接】awesome-codex-skills A curated list of practical Codex skills for automating workflows across the Codex CLI and API. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-c…

2026/9/14 9:34:17

TF-IDF算法原理与Python实战:文本特征提取指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 9:34:17

Java开发常见错题解析与避坑指南

1. Java错题知识点概述作为一名Java开发者,在学习和工作中难免会遇到各种"坑"。3月25日这个时间节点,我整理了一批常见的Java错题知识点,这些内容涵盖了从基础语法到JVM原理的多个层面。这些错题不是简单的记忆点,而是真…

2026/9/14 9:34:17

基于JSP+SSM的大学生创业创新网站开发实践

1. 项目概述这个Java毕业设计项目选题"jspssm大学生创业创新网站"是一个典型的基于Java EE技术栈的Web应用开发实践。作为一名有多年Java开发经验的工程师,我认为这个选题非常适合计算机相关专业的毕业设计,因为它涵盖了从数据库设计到前端展示…

2026/9/14 9:34:17

MATLAB从零实现OFDM通信系统仿真与验证

简介:本资源是一份面向通信工程专业学生及MATLAB初学者的OFDM通信系统仿真实践材料,聚焦无线通信核心原理落地,解决OFDM概念抽象、编程实现难、信道建模不直观等学习痛点。压缩包仅含1个关键文件——ofdm.m主程序脚本(2KB&#xf…

2026/9/14 9:29:17

快速谱峭度(kurtogram)实现轴承故障诊断:从峭度到包络谱

简介:面向机械故障诊断与信号处理场景的快速谱峭度工具包,以Kurtogram算法为核心,提供完整Matlab实现与配套实验数据。内容覆盖峭度谱计算、快速峭度图绘制、谱峭度特征提取等关键环节,适用于设备状态监测、滚动轴承故障识别及异常…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码