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.
Feature Gallery
Multi-series · value-to-color mapping · density hexbin · secondary Y axis · time axis · line+area — commercial-grade features from a single renderer.

Key Highlights
Up to 10M points per series
Per-pixel-column min/max downsampling keeps 10M points interactive — about 110ms at 1920×1080.
Hybrid serialization (.chart)
Settings as JSON, bulk coordinates as binary blobs in a ZIP container — restores even the saved zoom and selection state.
One renderer, three backends
A single SkiaSharp renderer gives WPF, WinForms, and headless (PNG/SVG/PDF) pixel-identical output.
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.

Measured Performance at 10M Points
10-million-point series at 1920×1080; the restored render matches the original pixel for pixel.
Full render (with statistical bands)
Zoom render (culled)
Saved size (f32 + deflate)
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."
Try ScatterSharp
Open source under the Apache License 2.0. Find the source and samples (10M benchmark, WinForms demo, feature showcase) on GitHub.