ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Bokeh 3.4.1 补丁版解析:Graph 渲染、布局与 DataRange1d 的回归修复

Bokeh 3.4.1 补丁版解析:Graph 渲染、布局与 DataRange1d 的回归修复 Bokeh 3.4.1 补丁版解析Graph 渲染、布局与 DataRange1d 的回归修复【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokehBokeh3.4.12024 年 4 月发布是继3.4.0之后的补丁版本集中修复了一批功能回归regressions与文档问题。本文以仓库中的官方发布说明 docs/bokeh/source/docs/releases/3.4.1.rst 为主线逐项拆解每条变更背后的实际代码位置与修复原理帮助你在升级后准确判断哪些行为发生了变化以及这些修复对 Graph 图、布局更新、输入控件和数据范围等核心功能的影响。版本定位为什么需要补丁版本3.4.1是 Bokeh 3.4 系列的第一个补丁版本定位明确Bokeh version3.4.1(April 2024) is a patch release that fixes a number of minor bugs/regressions and docs issues.也就是说该版本不引入新功能、不改变公共 API 语义只针对3.4.0引入的回归问题regressions和小型缺陷做定点修复同时清理文档与工具链问题。对于生产环境使用者这类补丁版本通常可以直接升级而无需修改业务代码对于正在排查“3.4.0 之后某些图表行为异常”的开发者本清单则是一份精确的排查索引。以下按功能域逐条展开。图形渲染修复 GraphRendererView 次级 glyph 的配置修复内容修正了GraphRendererView中对次级 glyphsecondary glyphs的配置问题对应 PR13808。涉及的源码位置Graph 渲染器视图实现在 bokehjs/src/lib/models/renderers/graph_renderer.tsPython 侧模型定义在 src/bokeh/models/graphs.py。从源码结构看GraphRendererView在apply_coordinates()中会把坐标表达式统一绑定到一组 glyph 上这组 glyph 正是所谓的“次级 glyph”集合const edge_glyphs [ edge_renderer.glyph, edge_renderer.hover_glyph, edge_renderer.muted_glyph, edge_renderer.selection_glyph, edge_renderer.nonselection_glyph, ] const node_glyphs [ node_renderer.glyph, node_renderer.hover_glyph, node_renderer.muted_glyph, node_renderer.selection_glyph, node_renderer.nonselection_glyph, ]见 graph_renderer.ts 第 66-79 行在 Bokeh 的 glyph 体系中主 glyphglyph之外还有hover_glyph、muted_glyph、selection_glyph、nonselection_glyph等次级 glyph用于 hover、静音、选中与未选中状态下的视觉反馈。3.4.0期间对 Graph 渲染逻辑的重构曾导致这些次级 glyph 的坐标同步出现偏差本补丁恢复了它们在布局更新后正确接收节点/边坐标的行为。修复后当layout_provider发生变化时connect_signals()会依次调用apply_coordinates()、edge_view.set_data()与node_view.set_data()再触发重绘graph_renderer.ts 第 44-52 行保证所有状态 glyph 使用一致的坐标。对使用者的意义如果你的 Graph 图自定义了hover_glyph或selection_glyph升级到3.4.1后应验证这些状态样式是否按预期生效。布局系统允许动态更新 LayoutDOM.children修复内容此前LayoutDOM.children在创建后无法通过update()动态调整顺序对应 PR13807。涉及的源码位置布局容器基类定义于 bokehjs/src/lib/models/layouts/layout_dom.ts行列容器分别位于 layouts/row.ts 与 layouts/column.ts。LayoutDOM提供了update_children()与受保护的_update_children()钩子layout_dom.ts 第 160-162 行。修复使得子视图的增删与重排都能被正确同步到 Shadow DOM 中。源码注释中专门提到“如果某个子视图已被移除则按顺序追加所有 children 会导致问题”layout_dom.ts 第 189 行附近这正说明本补丁处理的是顺序变更场景只重新排序而不增删子项时旧实现可能漏掉 DOM 重排。from bokeh.models import Row, Spacer row Row(children[Spacer(width50), Spacer(width100)]) # 动态调整子项顺序 row.update(children[row.children[1], row.children[0]])对使用者的意义在 Bokeh Server 或bokeh.models的update()回调中动态调整布局顺序现在可以稳定生效适合实现拖拽排序、动态重组仪表盘等交互场景。输入控件title 与 description 支持运行时更新修复内容允许运行时更新InputWidget.{title, description}对应 PR13805。涉及的源码位置bokehjs/src/lib/models/widgets/input_widget.ts。InputWidget是所有输入型控件TextInput、Slider、Select等的基类。其视图通过_build_title()与_build_description()构建标题与描述帮助元素并通过on_change监听模型属性变化后重建对应 DOMthis.on_change(title, async () { await this._build_title() }) this.on_change(description, async () { await this._build_description() })input_widget.ts 第 64-70 行其中description既可以是纯字符串此时会写入desc_el.title作为原生提示也可以是一个Tooltip模型此时会把target_override指向描述图标元素并监听其visible属性实现悬停弹出见 input_widget.ts 第 97-126 行。本修复确保这两种形式都能在控件创建后被热更新。对使用者的意义表单校验失败时动态改写控件title提示、或根据上下文切换description帮助文案均可在不重建控件的前提下完成。数据范围DataRange1d 正确遵守 min_interval / max_interval修复内容修复DataRange1d未能正确尊重min_interval与max_interval的问题对应 PR13819。涉及的源码位置bokehjs/src/lib/models/ranges/data_range1d.tsPython 侧属性定义在 src/bokeh/models/ranges.py。DataRange1d是 Bokeh 自动范围计算的核心它汇总所有auto_ranged渲染器的包围盒_compute_min_max再依据range_padding、flipped、follow等策略生成起止值。本补丁的关键逻辑位于_compute_range()const min_interval this.min_interval ?? 0 const max_interval this.max_interval ?? Infinity // ... span clamp(span, min_interval, max_interval)data_range1d.ts 第 199-260 行在线性非 log分支中span先根据range_padding计算再被clamp()限制到[min_interval, max_interval]区间内log 分支同样在计算10**(center ± span/2)之前对 span 做钳制。这意味着无论数据如何变化最终轴跨度都不会小于min_interval或大于max_interval。Python 侧两种取值类型均有定义Either(Null, Float, TimeDelta)ranges.py 第 152-157 行因此也可为时间轴指定时间间隔。典型使用场景from bokeh.plotting import figure p figure() p.x_range.min_interval 2.0 # 缩放时 x 轴跨度不小于 2 p.x_range.max_interval 100.0 # 缩放时 x 轴跨度不大于 100这样在框选缩放、滚轮缩放时用户不会把坐标轴缩放到超出合理范围常用于数据浏览类应用的“缩放下限/上限”控制。WebGL抗锯齿按像素比缩放修复内容修复 WebGL 渲染中抗锯齿未按 pixel ratio 正确缩放的缺陷对应 PR13783。涉及的源码位置canvas 与像素比相关的实现位于 bokehjs/src/lib/core/util/canvas.ts。在高 DPI如 Retina屏幕上Bokeh 的 Canvas 会按devicePixelRatio缩放target.width width * this.pixel_ratiocanvas.ts 第 107-108 行并通过ctx.scale(pixel_ratio, pixel_ratio)把逻辑坐标映射到物理像素canvas.ts 第 127-129 行。此前 WebGL 路径的抗锯齿宽度直接使用 CSS 像素值导致高 DPI 屏幕上线条显得粗细不均或过度模糊本修复让抗锯齿尺寸随像素比同步缩放使 WebGL 渲染与 Canvas 2D 渲染在 Retina/高缩放比屏幕上的观感保持一致。对使用者的意义启用 WebGL 渲染output_backendwebgl的图表在 4K、Retina 显示器上线条更锐利、边缘更平滑。工程与文档链路的四项清理补丁版本除功能修复外还包含工程与文档方面的改进启用 RUF001 规则PR13788在 Ruff lint 配置中启用RUF001混淆字符检查防止源码中出现形近易混淆的 Unicode 字符。仓库的 pyproject.toml 中已声明lint.select [..., RUF, ...]并在lint.allowed-confusables [σ]中保留唯一的合法例外pyproject.toml 第 168-176 行。这是纯代码质量改进不影响运行时行为。从文档中移除 Twitter 引用PR13775清理过时社交渠道信息属文档维护。支持在 Windows 上构建文档PR13776修复文档构建脚本在 Windows 环境下的兼容性方便 Windows 贡献者本地构建 docs 目录下的 Sphinx 文档。文档与 docstring 综合修正PR13793、13798、13781、13818、13820、13821涉及发布说明、API 参考与各类 docstring 的措辞与链接修正属于低风险文档维护。升级建议与验证清单3.4.1是补丁版本升级风险低。若你正从3.4.0升级建议按以下清单回归验证Graph 图自定义过hover_glyph/selection_glyph/muted_glyph/nonselection_glyph的图确认状态样式正常显示。动态布局通过update(children[...])重排Row/Column子项的应用确认顺序变更即时生效。输入控件运行时修改title/description字符串或 Tooltip的表单确认 UI 同步刷新。缩放范围设置了min_interval/max_interval的图表确认缩放跨度始终被限制在设定区间内。WebGL 高 DPI 屏幕检查output_backendwebgl图表在 Retina 显示器上的线条清晰度。构建与 lint确认 CI 或本地ruff check通过涉及 RUF001 新规则Windows 用户可尝试本地构建文档。以上每项修复都能在仓库源码中找到对应实现位置可结合 bokehjs/src/lib/models 与 src/bokeh/models 目录继续深入阅读。【免费下载链接】bokehInteractive Data Visualization in the browser, from Python项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表