Open Source

ScatterSharp

面向海量传感器数据的高性能 C#/.NET 散点图(Scatter Chart)库。可将图表状态整体序列化,重新加载后连缩放状态都立即完全一致地渲染 — 每个序列可交互处理最多 1,000 万(10M)个点。

Apache License 2.0 · 开源GitHub 仓库

功能画廊

多序列 · 值-颜色映射 · 密度六边形分箱 · 副 Y 轴 · 时间轴 · 线+面 — 以单一渲染器提供商用级图表功能。

ScatterSharp 功能画廊 — 多序列、值-颜色映射、密度六边形分箱、副 Y 轴、时间轴、线+面

核心亮点

01

每序列最多 1,000 万点

按像素列 min/max 降采样,10M 点也能交互渲染 — 1920×1080 下约 110ms。

02

混合序列化 (.chart)

配置存为 JSON,海量坐标存为二进制 blob,打包进 ZIP 容器 — 连保存的缩放与选择状态也原样恢复。

03

单一渲染器,三种后端

仅凭 SkiaSharp 一套渲染器,WPF · WinForms · 无头(PNG/SVG/PDF)输出像素级一致。

04

数据库回溯交互

点击数据点即可回溯到源数据库行(PointIds + PointClicked) — 支持逐点自定义提示框与多序列共享提示框。

主要功能

所有功能无一遗漏地承载于 ChartModel,并完整通过序列化往返。

标记 · 数据点

6 种标记形状,大小/颜色/不透明度,气泡(逐点大小),值-颜色映射+色条,以及图像标记。

交互

提示框+十字线、缩放框(保持纵横比)、按轴缩放、橡皮筋选择(可保存)、图例点击切换、实时流式追加。

坐标轴

线性/对数/时间轴(标签自动细分)、副 Y 轴、反向轴、类别轴、固定纵横比、按轴指定字体。

标注 · 分析

阈值线/区带/矩形/文本标注,趋势线+移动平均,密度热图/六边形分箱,均值·中位数·±kσ 统计区带。

样式 · 导出

亮色/暗色主题+调色板,按元素指定字体,PNG·SVG·PDF(矢量)·剪贴板导出,字体回退支持韩文等非拉丁文本。

数据

10M 降采样、实时追加(滚动窗口)、线/面/柱模式、误差棒、NaN/缺失值处理、SoA + Uniform X 内存优化。

高级分析功能

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

ScatterSharp 高级功能 — 密度热图/六边形分箱、线/面、误差棒、橡皮筋选择

10M 数据点实测性能

基于 1,000 万点序列(1920×1080),恢复后的渲染结果与原图逐像素一致。

~110ms

完整渲染 (含统计区带)

~72ms

缩放渲染 (裁剪)

~33MB

保存大小 (f32 + deflate)

~330ms

加载 (恢复 10M 点)

诀窍:先只裁剪可见区间(VisibleRange),再按像素列 min/max 降采样 — 即使源数据有 1,000 万点,实际绘制的顶点也仅在屏幕宽度量级。渲染循环运行在零分配(zero-allocation)热路径上。

架构 — 模型与渲染器分离

图表的全部状态由一个纯 POCO 的 ChartModel 表达,渲染器只接受这个模型作为输入 — "加载 → 渲染"即等于"保存后立即绘制"。

Chart.Abstractions
纯领域模型 + 接口 + 交互 (ChartInteraction · ViewportController · HitTester)
Chart.Serialization
ChartSerializer(ZIP .chart) · BinaryPointCodec · JSON 转换器 · SchemaMigrator
Chart.Rendering.Skia
ChartRenderer 管线 · Downsampler · DensityRenderer · PNG/SVG 导出器
Chart.Wpf / .WinForms
轻薄 UI 宿主 — 不含绘制逻辑,将输入转换为像素并委托给 ChartInteraction
Chart
ScatterChart 门面 — 公开 API (AddSeries · Save · Load · RenderToPng)

试用 ScatterSharp

以 Apache License 2.0 开源。可在 GitHub 查看源码与示例(10M 基准测试、WinForms 演示、功能展示)。