Open Source
ScatterSharp
面向海量传感器数据的 C#/.NET 散点图库。将 ChartModel 数据、样式和视口保存到 .chart 文件并恢复,同时提供 Python 集成和单独实现的 Canvas Web 查看器。
Apache License 2.0 · 开源GitHub 仓库
从图表模型到存储与渲染
保存包含数据、样式和视口的 ChartModel,并用于原生界面、文件导出和独立 Web 查看器。

- 1.构建图表模型
- 通过 ScatterChart API 定义序列、坐标、轴、标注、视口和选择状态。等间隔 X 用起点与间隔表示,可通过 PointIds 关联源记录标识符。
- 2.保存与恢复状态
- ChartSerializer 将 manifest.json、chart.json 和 blobs/*.bin 写入 .chart ZIP。大规模坐标使用二进制存储,可选择精度与压缩选项。
- 3.选择范围并渲染
- ChartRenderer 计算布局与比例尺,使用 VisibleRange 及 MinMax、M4 等降采样,再通过 IRenderSurface 绘制序列和叠加层。
- 4.显示与交互
- 原生宿主以及 PNG、SVG、PDF 导出使用 Skia。输入交给 ChartInteraction;Web 解析 .chart 后用独立 Canvas2D 引擎展示。
WPF、WinForms 和无头导出共享 Skia。Web Canvas 是读取同一 .chart 格式的独立实现,不保证两个渲染器之间逐像素一致。
查看GitHub文档与代码从 Python 数据到 Web 图表
Python 准备数据与选项,chartgen 生成 .chart 和可选 PNG,Web 示例从图片预览切换到交互式图表。

- 1.准备序列数据
- 组织 NumPy 数组和图表选项。可使用 SQL 查询结果,但 Trino、Iceberg 示例基础设施不是图表库的必需组件。
- 2.向 .NET 传递数据
- Python 包装器写入 spec.json 和各序列的 Arrow IPC 文件,再启动 chartgen。C# 解析列角色并组装 ChartModel。
- 3.生成两种产物
- 保存 .chart 包,并可选生成 Skia PNG。FastAPI 示例返回 imageDataUrl,以及单独下载图表文件的 chartUrl。
- 4.先预览再探索
- 先展示 PNG,点击后获取 .chart。浏览器解码 ZIP 和 SCPT 数据,在 Canvas2D 中处理缩放、平移和提示框交互。
Python、FastAPI 和 Trino 均为可选集成。Web 示例的临时文件缓存不是持久存储;浏览器使用自身 Canvas 引擎渲染下载的 .chart 数据。
查看GitHub文档与代码通过可视化示例了解图表功能
展示标记、坐标轴、注释与统计叠加如何应用于原生图表。

- 1.标记
- 使用形状、气泡、颜色和图像编码数值。
- 2.坐标轴
- 选择尺度、时间格式、副轴与纵横比。
- 3.注释
- 添加阈值、区域、文本、趋势线与移动平均。
- 4.统计
- 查看密度、均值、中位数与偏差带。
示例用于说明原生功能;Web Canvas 查看器有独立支持范围。
查看GitHub文档与代码大型图表的交互、保存与渲染
展示原生交互与导出路径,并明确性能数据来自仓库报告。

- 1.交互
- 缩放、选择并将点标识符传给宿主应用。
- 2.数据处理
- 追加点、切换系列样式并处理缺失值。
- 3.输出
- 保存图表状态并使用原生图像和矢量导出。
- 4.性能理解
- 保留原始数组并减少可见范围与绘制顶点。
原生端与 Web 共享 .chart 格式,不保证像素一致。浏览器 SVG/PDF 导出和流式追加不在当前 Web 支持范围。
查看GitHub文档与代码功能画廊
多序列 · 值-颜色映射 · 密度六边形分箱 · 副 Y 轴 · 时间轴 · 线+面 — 以单一渲染器提供商用级图表功能。

高级分析功能
密度热图/六边形分箱 · 线/面 · 误差棒 · 橡皮筋选择 — 连分析状态也会被保存和恢复。
