Reflex 开源 XY:基于 Rust 的超快 Python 绘图库,可保持 1 亿点图表交互流畅
Reflex Open Sources XY: A Rust-Backed Super-Fast Python Charting Library That Keeps 100 Million Point Charts Interactive
Reflex AI 发布 Apache-2.0 许可的 Python 交互式 2D 绘图库 XY,通过 Rust 原生核心、二进制缓冲传输和 WebGL2 渲染,在 1 万至 1 亿点范围内保持约 0.08 秒的渲染时间。
通过Rust核心和二进制输出,XY将千万级点的交互渲染稳定在0.08秒,并让HTML导出体积从259 MiB缩至258 KiB,这对金融、基因组学等需原始数据钻取的大数据场景有直接落地价值。
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,每个单元格运行一次。
| 点数 | XY | Matplotlib (WebAgg) | Plotly(scattergl) |
|---|---|---|---|
| 1M | 0.084 s | 0.357 s | 0.614 s |
| 10M | 0.083 s | 2.804 s | 3.367 s |
| 50M | 0.076 s | 13.385 s | ✕ |
| 100M | 0.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