Hacker News 中文摘要

RSS订阅

Show HN: XY – 一个快速、可组合、GPU加速的交互式绘图库 -- Show HN: XY – A Fast, composable, GPU-accelerated interactive plotting library

文章摘要

XY是一个超快速、可组合的Python绘图库,支持交互式和高度自定义的图表绘制。

文章总结

XY 是一款专为 Python 用户设计的超快速、可交互且高度可定制的图表库,适用于网页、笔记本和静态导出。它支持通过声明式或 matplotlib 风格构建图表,并允许使用 Python、CSS 或 Tailwind 进行完全自定义。对于小规模数据,每个点都会发送到浏览器;对于大规模数据,其 Rust 核心会根据屏幕分辨率仅计算需要显示的内容,并通过平移、缩放、悬停和选择等交互操作,在需要时重新计算并返回原始数据行。XY 曾成功渲染了包含 100 亿个点的 OpenStreetMap 数据集。

该库目前处于 alpha 阶段,正在频繁更新。安装简单,只需执行 pip install xyuv add xy。入门示例显示,图表由容器和内部标记组成,支持 NumPy 等序列。例如,一个简单的折线图可以通过 xy.line_chart(xy.line([1, 2, 3, 4, 5], [120, 180, 165, 240, 310])) 创建,并可导出为 HTML、PNG、SVG 或 PDF。同样的 API 可扩展到上亿个点,以密度表面形式呈现,并在缩放时解析为单个点。

XY 提供了全面的自定义能力,包括控制标记的颜色、大小、透明度等属性,自定义坐标轴、网格、图例等引导元素,添加平移、缩放、悬停等交互功能,以及创建图层、分面和应用主题。它还提供了与 matplotlib 的兼容性,只需更改导入语句即可沿用常见的绘图代码。

在性能基准测试中,XY 表现出色。从 1 万到 1 亿个点,其渲染时间几乎恒定在 0.07 到 0.08 秒之间,远优于 Matplotlib 和 Plotly。在内存使用方面,XY 也更具优势,例如处理 1 亿个点时仅占用 2.58 GiB 内存,而 Matplotlib 在 5000 万个点时已无法完成渲染。

XY 可以无缝嵌入到 Reflex 应用中,通过 reflex-xy 适配器,无需 JavaScript、iframe 或单独的图表服务。只需安装 reflex-xy 包,在配置中注册适配器,即可在组件树中直接使用 XY 图表,并保持悬停、平移和缩放等交互功能。

该库提供了多个真实世界的数据集示例,如 Gaia DR3 恒星 HR 图、gnomAD 等位基因频率图、Pan-UKBB 曼哈顿图、Dukascopy 外汇报价图、LIGO 引力波应变图以及纽约出租车密度图,每个示例都附有可运行的笔记本。

XY 的工作原理是:将精确值存储在 ColumnStore 中,在 Rust 中计算细节层次,并传输类型化的二进制缓冲区。对于密集的概览视图,它会进行聚合;对于狭窄的视图,则返回精确点。平移和缩放操作会请求精细化的数据负载,而悬停和选择仍能返回原始数据行。

未来路线图包括:分类分布图、回归诊断图、散点矩阵图、饼图/甜甜圈图、K线图、瀑布图、漏斗图、矩形树图、雷达图、坡度图以及 3D 和体积可视化等。用户可以通过提交 issue 来请求未列出的图表或功能。

评论总结

根据评论内容,总结主要观点如下:

正面评价(高度认可) - 技术实现受好评:Rust+Tailwind CSS组合获赞("Great, Rust and Tailwind CSS two of my favorite things in one") - 性能表现突出:支持离屏渲染10亿节点OSM数据("render the entirety of OpenStreetMaps...with sub-second pan/zooms") - 学术应用潜力:替代matplotlib获期待("academia loves such a change") - 发展前景看好:有望成为标准库("can easily see this becoming a standard library")

技术讨论(中性) - GPU加速必要性存疑:多数仪表盘数据量不足以体现优势("most dashboards don't render enough data for it to matter") - 与同类工具对比:提及datashader、napari、plotly-resampler等替代方案("how do the examples compare to datashader?") - 实时更新性能待验证:关注生产环境部署("How does it perform with real time updates?") - 可视化原则需完善:建议参考Edward Tufte的数据可视化原则("read up on Ed Tufte's principles")

功能建议 - 期待3D/体积可视化("can't wait for the 3D and volume visualizations") - 缺乏原生GUI支持("no support for native GUI?") - 建议采用图形语法(grammar of graphics)抽象("would love to see xy work in that direction")

争议点 - 密集散点图的可读性:需避免数据密度误导("it irks me when people make dense scatterplots without any indication of density")