Open Source

ScatterSharp

A C#/.NET scatter chart library for large sensor datasets. Save and restore ChartModel data, styles and viewport in .chart files, with Python integration and a separate Canvas web viewer.

Apache License 2.0 · Open SourceGitHub Repository

From chart model to saved and rendered output

Save a ChartModel containing data, styles and viewport, then use it for native displays, file exports and a separate web viewer.

From chart model to saved and rendered output — Diagram of components and execution boundaries: Build the chart model → Save and restore state → Select the view and render → Display and interact
01 Build the chart model → 02 Save and restore state → 03 Select the view and render → 04 Display and interactSelect the diagram to zoom to its original size.
1.Build the chart model
Use ScatterChart APIs to define series, points, axes, annotations, viewport and selection. Uniform X uses start and interval values; optional PointIds associate points with source identifiers.
2.Save and restore state
ChartSerializer writes manifest.json, chart.json and blobs/*.bin into a .chart ZIP. Large coordinate arrays use binary storage with configurable precision and compression.
3.Select the view and render
ChartRenderer computes layout and scales, applies VisibleRange and downsampling such as MinMax or M4, then draws series and overlays through IRenderSurface.
4.Display and interact
Native hosts and PNG, SVG and PDF exports use Skia. Input flows through ChartInteraction; the web viewer decodes .chart and displays it with a separate Canvas2D engine.

WPF, WinForms and headless exports share Skia. Web Canvas is a separate implementation reading the same .chart format; pixel equality between renderers is not guaranteed.

View GitHub documentation and code

From Python data to a web chart

Python prepares data and options, chartgen produces .chart and optional PNG files, and the web example moves from an image preview to an interactive chart.

From Python data to a web chart — Diagram of components and execution boundaries: Prepare series data → Pass data to .NET → Produce two artifacts → Preview, then explore
01 Prepare series data → 02 Pass data to .NET → 03 Produce two artifacts → 04 Preview, then exploreSelect the diagram to zoom to its original size.
1.Prepare series data
Assemble NumPy arrays and chart options. SQL results can supply data, but the Trino and Iceberg example infrastructure is not required by the chart library.
2.Pass data to .NET
The Python wrapper writes spec.json and per-series Arrow IPC files, then starts chartgen. C# interprets column roles and assembles ChartModel.
3.Produce two artifacts
Save the .chart package and optionally generate a Skia PNG. The FastAPI example returns imageDataUrl and a separate chartUrl for downloading the chart file.
4.Preview, then explore
Show the PNG first and fetch .chart on click. The browser decodes ZIP and SCPT data, then handles zoom, pan and tooltips in Canvas2D.

Python, FastAPI and Trino are optional integrations. The web example’s temporary-file cache is not permanent storage; the browser renders downloaded .chart data with its own Canvas engine.

View GitHub documentation and code

Chart features through visual examples

See how markers, axes, annotations and statistical overlays change a native chart.

Chart features through visual examples — Markers · Axes · Annotations · Statistics
See how markers, axes, annotations and statistical overlays change a native chart.Select the diagram to zoom to its original size.
1.Markers
Encode values with shapes, bubbles, colors and images.
2.Axes
Choose scale, time formatting, secondary axes and aspect ratio.
3.Annotations
Add thresholds, regions, text, trend lines and moving averages.
4.Statistics
Inspect density views and mean, median and deviation bands.

Examples illustrate native features; the web Canvas viewer has its own support scope.

View GitHub documentation and code

Interact, save and render large charts

Explore the native interactions and export path, with performance numbers attributed to the repository.

Interact, save and render large charts — Interaction · Data handling · Outputs · Performance context
Explore the native interactions and export path, with performance numbers attributed to the repository.Select the diagram to zoom to its original size.
1.Interaction
Zoom, select and forward point identifiers to the host application.
2.Data handling
Append points, vary series styles and preserve missing values.
3.Outputs
Persist chart state and use native image/vector exports.
4.Performance context
Cull and downsample rendering while keeping source arrays.

Native and web share .chart format, not pixel equality. Browser SVG/PDF export and streaming append are outside the current documented web scope.

View GitHub documentation and code

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

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

Try ScatterSharp

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