XY

3个月前发布 58 00

Reflex AI已发布XY,一个Apache-2.0许可的Python图表库,用于交互式2D可视化。大多数Python图表栈为每行数据创建一个可绘制对象,因此一旦超过几十万点,渲染、悬停和缩放性能就会下降。XY将工作移至原生Rust核心,向浏览器发送类型化二进制缓冲区而非JSON,并使用WebGL2进行绘制。

所在地:
美国
收录时间:
2026-08-04
其他站点:

在数据可视化领域,Python 开发者长期面临一个性能瓶颈:当数据量超过几十万点时,主流的绘图库(如 Matplotlib、Plotly)往往会变得卡顿,渲染、悬停和缩放操作延迟显著增加。

Reflex AI 今日正式开源了 XY,一个基于 Apache-2.0 许可的 Python 交互式 2D 可视化库。XY 通过将核心计算移至 Rust、使用 WebGL2 进行渲染以及发送类型化二进制缓冲区而非 JSON,彻底打破了这一限制。基准测试显示,即使在处理 1 亿个数据点时,XY 的渲染时间仍稳定在 0.08 秒左右,实现了真正的流畅交互。

核心突破:为什么 XY 这么快?

1. Rust 核心 + WebGL2 渲染

XY 摒弃了传统的“每行数据创建一个可绘制对象”的模式。它将繁重的数据处理工作交给原生的 Rust 核心,并利用浏览器的 WebGL2 能力进行高效绘制。这种架构使得渲染性能不再随数据量线性下降。

2. 二进制传输替代 JSON

传统库通常将数据序列化为庞大的 JSON 字符串发送给前端,而 XY 直接发送类型化的二进制缓冲区。这不仅大幅降低了网络传输开销,还减少了浏览器的解析负担。

  • 体积对比:一个 1000 万点的交互式散点图,XY 导出的 HTML 仅为 258 KiB,而 Plotly 等效文件高达 259 MiB。无论数据量从 1M 增加到 100M,XY 的有效载荷始终保持在约 258 KiB 附近。

3. 智能层级表示与精确回溯

XY 在 Python 端保留规范的 f64 列数据(ColumnStore),并根据数据量自动选择最佳的渲染表示:

  • M4 抽取:超过 10,000 行时,对长有序线进行 M4 算法抽取。
  • 密度图:超过 200,000 点时,自动生成散点密度图(默认 512×384 网格)。
  • 精确交互:尽管视觉上进行了简化,但原始数据仍保留在内存中。当用户悬停、选择或缩放到狭窄窗口时,XY 能迅速解析并返回原始行的精确值,确保数据分析的准确性。

性能基准:碾压级优势

在 Apple M5 Pro 上的真实浏览器基准测试中,XY 的表现令人瞩目:

数据点数XY (秒)Matplotlib (WebAgg)Plotly (scattergl)
1M0.0840.3570.614
10M0.0832.8043.367
50M0.07613.385✕ (崩溃/超时)
100M0.081✕✕
  • 速度提升:在 10M 点时,XY 比 Matplotlib 快 34 倍,比 Plotly 快 40 倍。
  • 内存效率:10M 点时,XY 的 Python 端峰值内存仅为 0.32 GiB,远低于 Matplotlib 的 0.84 GiB 和 Plotly 的 1.86 GiB。

适用场景与部署建议

目前 XY 处于 早期 Alpha 版本 (0.0.1),建议用于以下场景:

  • 内部数据分析:Jupyter 笔记本、内部仪表板。
  • 高行数瓶颈领域:量化金融(逐笔交易数据)、基因组学(曼哈顿图)、可观测性遥测、天文学及地理空间分析。

注意:受监管的企业或面向客户的关键路径应用建议先进行试点,暂不建议大规模生产部署。

快速上手

XY 的安装极其简单,支持 Python 3.11 及以上版本:

pip install xy

它还提供了便捷的迁移接口,支持 import xy.pyplot as plt,可以运行常见的 Matplotlib pyplot 代码(部分高级功能可能不支持)。此外,通过 reflex-xy 适配器,可以将任何 XY 图表无缝转换为 Reflex 组件,无需编写 JavaScript 或使用 iframe。

相关导航