跳到正文
北京时间
原文
MarkTechPost(RSS)· Asif Razzaq·· 2026-08-04精选AI 评分79

Reflex 开源 XY:基于 Rust 的超快 Python 绘图库,可保持 1 亿点图表交互流畅

Reflex Open Sources XY: A Rust-Backed Super-Fast Python Charting Library That Keeps 100 Million Point Charts Interactive

AI 导读

Reflex AI 发布 Apache-2.0 许可的 Python 交互式 2D 绘图库 XY,通过 Rust 原生核心、二进制缓冲传输和 WebGL2 渲染,在 1 万至 1 亿点范围内保持约 0.08 秒的渲染时间。

推荐理由

通过Rust核心和二进制输出,XY将千万级点的交互渲染稳定在0.08秒,并让HTML导出体积从259 MiB缩至258 KiB,这对金融、基因组学等需原始数据钻取的大数据场景有直接落地价值。

正文 · AI 翻译

Reflex AI 发布了 XY,这是一个采用 Apache-2.0 许可的 Python 图表库,用于交互式 2D 可视化。大多数 Python 图表技术栈会为每一行数据创建一个可绘制对象,因此一旦超过几十万个点,渲染、悬停和缩放性能就会下降。XY 将这部分工作转移到原生 Rust 核心中,向浏览器发送类型化二进制缓冲区而非 JSON,并使用 WebGL2 进行绘制。按照该基准测试的说法,XY 在 10,000 个点时耗时 0.071 秒,在 1 亿个点时耗时 0.081 秒。它以 pip install xy 形式发布,并要求 Python 3.11 或更高版本。

它可以部署吗

XY 目前是 版本 0.0.1 的早期 alpha 阶段。它以 pip install xy 形式发布,并要求 Python 3.11 或更高版本。

这对应着一个清晰的部署适用范围。初创公司和中等规模的数据团队现在就可以将其用于内部分析、notebook 和可共享的产物。受监管的企业应当先进行试点,而不是把它放到面向客户的关键路径上。它最适合那些行数确实是实际瓶颈的场景:量化金融(逐笔数据)、基因组学与生物信息学(曼哈顿图、等位基因频率扫描)、可观测性与遥测、天文学,以及 地理空间分析。下面是一行命令安装它的方法。

pip install xy

解读

表示阶梯如何工作

XY 在 Python 中通过一个 ColumnStore 保留规范的 f64 列,并为每条轨迹选择一种渲染表示。当前默认值在超过 10,000 行时启用 M4 抽稀以处理长有序折线,并在超过 200,000 个点时启用 自动散点密度。密度网格默认采用 512×384 个单元格。文档明确指出,这些是 1.0 之前的策略阈值,而非 API 保证。

由于精确值保留在 Python 中,当活动层级具有精确映射时,悬停、选择和 pick() 仍能解析到原始行。放大到狭窄窗口时,会为经过填充的对齐窗口返回精确的可见点,而附近的平移则从该缓存窗口渲染,无需再次请求。Reflex 在此处谨慎地避免过度宣称:密度是原生分箱并由 GPU 渲染的,而非全 GPU 的摄取流水线,且摄取、分箱和抽稀仍随源行数而扩展。

性能

该基准测试通过真实浏览器驱动每个库,并且只有当画布经过验证正确且在 10 个字节完全相同的帧上保持稳定时才停止计时。测量结果来自一台 Apple M5 Pro,每个单元格运行一次。

点数XYMatplotlib (WebAgg)Plotly(scattergl)
1M0.084 s0.357 s0.614 s
10M0.083 s2.804 s3.367 s
50M0.076 s13.385 s✕
100M0.081 s✕✕

也就是说,在 10M 时实现了 34× 的加速,在 50M 时实现了 177× 的加速。10M 时 Python 侧峰值内存,XY 为 0.32 GiB,而 Matplotlib 为 0.84 GiB,Plotly 为 1.86 GiB。借助 density=False,XY 仍能在 5.26 GiB 内存下于 1.343 s 内绘制 100M 个精确标记。Reflex 还报告称渲染了完整的 OpenStreetMap 数据集——100 亿个点。

一个包含 1000 万个点的交互式散点图导出为 258 KiB 的 HTML,而据称 Plotly 的等效实现为 259 MiB。从 100 万行到 1 亿行,载荷始终保持在接近 258 KiB 的水平。

API 接口与集成

图表通过标记、坐标轴、图例、工具提示和注释以声明式方式组合而成。目前提供十四种图表类型,包括散点图、折线图、面积图、直方图、箱线图、小提琴图、ECDF、热力图、六边形分箱图(hexbin)和等高线图。样式可通过稳定的 DOM 插槽接受 CSS 和 Tailwind 类。为便于迁移,import xy.pyplot as plt 可运行常见的 Matplotlib pyplot 代码,不过 兼容性指南 指出并非所有功能都受支持。另有一个 reflex-xy 适配器可将任意图表转换为 Reflex 组件,无需 JavaScript 或 iframe。

核心要点

  • XY 通过绘制受屏幕边界约束的表示形式而非逐行标记,在 1 万到 1 亿个点的范围内保持约 0.08 秒的渲染时间。
  • Rust 核心加上二进制传输,将 1000 万点的交互式导出缩减至 258 KiB,而 Plotly 为 259 MiB。
  • 精确的 f64 列保留在 Python 中,因此悬停、选择和缩放下钻仍能返回原始行。
  • 目前可用于 notebook、内部仪表盘和可分享的 HTML;0.0.1 alpha 版本表明其尚不适合关键路径。
  • 最适合的是金融、基因组学、遥测和天文学领域,在这些领域中,先采样再绘图是当前的默认做法。

欢迎查看 GitHub 仓库 和 技术细节。另外,欢迎在 Twitter 上关注我们,也别忘了加入我们拥有 15 万+ 成员的 ML SubReddit,并订阅我们的新闻通讯。等等!你在用 Telegram 吗?现在你也可以在 Telegram 上加入我们了。

来源:MarkTechPost(RSS) · marktechpost.com