Open Source

ScatterSharp

A high-performance C#/.NET scatter chart library for large sensor datasets. Serialize the entire chart state and load it back for instantly identical rendering — down to the saved zoom state — while handling up to 10 million points per series interactively.

Apache License 2.0 · Open SourceGitHub Repository

Feature Gallery

Multi-series · value-to-color mapping · density hexbin · secondary Y axis · time axis · line+area — commercial-grade features from a single renderer.

ScatterSharp feature gallery — multi-series, value-color mapping, density hexbin, secondary Y axis, time axis, line+area

Key Highlights

01

Up to 10M points per series

Per-pixel-column min/max downsampling keeps 10M points interactive — about 110ms at 1920×1080.

02

Hybrid serialization (.chart)

Settings as JSON, bulk coordinates as binary blobs in a ZIP container — restores even the saved zoom and selection state.

03

One renderer, three backends

A single SkiaSharp renderer gives WPF, WinForms, and headless (PNG/SVG/PDF) pixel-identical output.

04

DB traceback interaction

Click a point to trace back to the source DB row (PointIds + PointClicked) — per-point custom tooltips and shared multi-series tooltips.

Main Features

Every feature rides on ChartModel and round-trips through serialization — nothing is left out.

Markers · Points

Six marker shapes, size/color/opacity, bubbles (per-point size), value-to-color mapping with colorbar, and image markers.

Interaction

Tooltip + crosshair, zoom box (aspect-preserving), per-axis zoom, rubber-band selection (persisted), legend click toggles, live streaming append.

Axes

Linear/log/time axes (auto-refined labels), secondary Y axis, inverted axes, category axis, fixed aspect ratio, per-axis fonts.

Annotations · Analysis

Threshold lines/bands/rects/text, trend line + moving average, density heatmap/hexbin, mean/median/±kσ statistical bands.

Style · Export

Light/dark themes + palettes, per-element fonts, PNG·SVG·PDF (vector)·clipboard export, font fallback for non-Latin text such as Korean.

Data

10M downsampling, live append (rolling window), line/area/bar modes, error bars, NaN/missing handling, SoA + uniform-X memory optimization.

Advanced Analysis Features

Density heatmap/hexbin · line/area · error bars · rubber-band selection — analysis state is saved and restored too.

ScatterSharp advanced features — density heatmap/hexbin, line/area, error bars, rubber-band selection

Measured Performance at 10M Points

10-million-point series at 1920×1080; the restored render matches the original pixel for pixel.

~110ms

Full render (with statistical bands)

~72ms

Zoom render (culled)

~33MB

Saved size (f32 + deflate)

~330ms

Load (restoring 10M points)

The trick: cull to the visible range first, then downsample to min/max per pixel column — even with 10M source points, the vertices actually drawn stay near screen width. The render loop runs on a zero-allocation hot path.

Architecture — Model Separated from Renderer

All chart state lives in one pure-POCO ChartModel and the renderer takes only that model as input — so "load → render" is literally "save, then draw instantly."

Chart.Abstractions
Pure domain model + interfaces + interaction (ChartInteraction · ViewportController · HitTester)
Chart.Serialization
ChartSerializer (ZIP .chart) · BinaryPointCodec · JSON converters · SchemaMigrator
Chart.Rendering.Skia
ChartRenderer pipeline · Downsampler · DensityRenderer · PNG/SVG exporters
Chart.Wpf / .WinForms
Thin UI hosts — no drawing logic; they translate input to pixels and delegate to ChartInteraction
Chart
ScatterChart facade — the public API (AddSeries · Save · Load · RenderToPng)

Try ScatterSharp

Open source under the Apache License 2.0. Find the source and samples (10M benchmark, WinForms demo, feature showcase) on GitHub.