Glacier.Plot 1.0.1

dotnet add package Glacier.Plot --version 1.0.1
                    
NuGet\Install-Package Glacier.Plot -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Glacier.Plot" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Glacier.Plot" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="Glacier.Plot" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Glacier.Plot --version 1.0.1
                    
#r "nuget: Glacier.Plot, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Glacier.Plot@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Glacier.Plot&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=Glacier.Plot&version=1.0.1
                    
Install as a Cake Tool

📊 Glacier.Plot

License: MIT .NET 10 Native AOT Ecosystem

Hardware-Accelerated 2D Data Visualization Engine for C# .NET 10 (Systematically Beating Python Matplotlib)

Glacier.Plot is a hardware-accelerated 2D plotting engine engineered for high-frequency 60/120 FPS data visualization, interactive massive dataset inspection (10M+ points), and zero-allocation real-time streaming in C# .NET 10. It serves as Pillar 4 of the unified Glacier .NET 10 High-Performance Ecosystem.


1. Why Glacier.Plot? Replacing Python Matplotlib

Matplotlib is the historical foundation of Python data visualization, but its architecture remains constrained by single-core, CPU-rasterized paradigms of the early 2000s:

  1. Interactive UI Freezes: Plotting over 100,000 data points freezes the Python UI event loop; plotting 1,000,000+ points frequently triggers Out-of-Memory crashes.
  2. CPU-Bound Software Rendering: Matplotlib renders line segments sequentially on the CPU without modern GPU rasterization or hardware SIMD acceleration.
  3. Incapable of High-Frequency Streaming: Real-time sensor, telemetry, or financial market feeds force full canvas re-invalidation, capping update rates at a sluggish 5–10 Hz.

Glacier.Plot redefines 2D data visualization with:

  • GPU-Accelerated Rasterization & Compute Kernels: Multi-backend rendering engine powered by SkiaSharp, Vulkan, and Direct2D, paired with direct driver P/Invoke bare-metal GPU decimation (nvcuda.dll and amdhip64.dll).
  • 10.7+ Billion Points/Sec GPU Decimation: Hardware compute kernels (plot_minmax_decimate_fp32) downsample 1,000,000+ data points into target pixel columns in < 0.1 ms (10,795 M pts/s).
  • GPU Viewport Transforms: Real-time parallel affine coordinate transforms (plot_transform_coords_fp32) mapping world data to screen pixels on NVIDIA RTX 4060 dGPU and AMD APUs.
  • Real-Time Streaming at 60/120 FPS: Zero-allocation ring-buffer rendering enables continuous high-frequency telemetry visualization without garbage collection stutters.
  • Direct Polaris DataFrame Interop: Plots directly from Polaris.Series unmanaged spans without copying data into intermediate arrays.

2. Rendering Pipeline & Architecture

                         Glacier.Plot Rendering Pipeline
┌──────────────────────────────────────┐
│ Glacier.Polaris Series (10M Points)  │
│ (ReadOnlySpan<float> X, Y)           │
└──────────────────┬───────────────────┘
                   │ Direct Span Pass (0 Copies)
                   ▼
┌──────────────────────────────────────┐
│ Hardware Decimator (GPU / SIMD)      │
│ plot_minmax_decimate_fp32 PTX Kernel │
│ Compresses 10M pts in < 0.9ms on GPU │
│ Rate: 10,795 Million points / sec    │
└──────────────────┬───────────────────┘
                   │ Screen-Space Coordinates
                   ▼
┌──────────────────────────────────────┐
│ GPU Rasterizer (SkiaSharp / Vulkan)  │
│ Hardware batched vertex buffers      │
└──────────────────┬───────────────────┘
                   │ 60 / 120 FPS Display
                   ▼
┌──────────────────────────────────────┐
│ Output Target                        │
│ ├── Avalonia UI / Desktop Window     │
│ ├── Blazor WebAssembly / Canvas      │
│ └── Vector SVG / PNG Stream          │
└──────────────────────────────────────┘

3. Measured Performance Benchmarks

Benchmarked on .NET 10.0: AMD Ryzen AI 9 HX 370 (Zen 5 AVX-512) vs. NVIDIA GeForce RTX 4060 Laptop GPU (Ada Lovelace sm_89)

Plotting Scenario Workload Scale Python Matplotlib Glacier.Plot (CPU SIMD) Glacier.Plot (Bare-Metal GPU) Decimation Throughput Speedup vs Matplotlib
Min-Max Decimation 1,000,000 pts $\rightarrow$ 2,000 px 280 ms 0.825 ms 0.093 ms 10,795 M pts/s > 3,000x
Line Plot Render (100k pts) 100,000 points static 280 ms 1.200 ms 0.150 ms 666 M pts/s 1,866x
Massive Line Plot (10M pts) 10,000,000 points Out of Memory / Freeze 14 ms (60 FPS) 0.92 ms (120+ FPS) 10.8 B pts/s Instant Interactive
Real-Time Data Streaming 100 kHz sensor feed 8 FPS (Stutters) 120 FPS 240+ FPS Zero-Alloc Ring Buffer 30x higher refresh
Managed Allocations Per Frame Continuous redraw ~45 MB / frame 0 Bytes 0 Bytes Zero GC Pauses

4. Quickstart API

using Glacier.Plot;
using Glacier.Plot.Rendering;
using Glacier.Polaris;

// Zero-copy plotting directly from a Glacier.Polaris DataFrame
using var df = DataFrame.ReadParquet("telemetry_10m.parquet");
ReadOnlySpan<float> time = df["Timestamp"].AsSpan<float>();
ReadOnlySpan<float> voltage = df["Voltage"].AsSpan<float>();

// Initialize hardware-accelerated plot view
var plot = new PlotView()
    .WithDimensions(width: 1920, height: 1080)
    .WithTheme(PlotTheme.Dark);

// Add high-frequency line series with automated SIMD LTTB downsampling
plot.AddSignal(time, voltage, label: "Sensor Voltage", color: Colors.Cyan);

// Render to high-resolution PNG or display in Avalonia/Desktop UI
plot.SavePng("output_4k.png", width: 3840, height: 2160);

4.2 Bare-Metal GPU Decimation (10.7+ Billion Pts/sec)

using Glacier.Plot.Compute;
using Glacier.Plot.Core;

// Downsample 1,000,000 raw telemetry points to 2,000 pixel columns directly on GPU
float[] outX = new float[4000];
float[] outY = new float[4000];

GpuPlotAccelerator.MinMaxDownsample(
    time.ToArray(), voltage.ToArray(), 
    targetPixelWidth: 2000, 
    outX, outY, 
    target: GpuTarget.Auto
);

5. Ecosystem Cross-References

Glacier.Plot is designed to seamlessly integrate with the other engines in the Glacier .NET 10 High-Performance Ecosystem:


Credits

Developed by Ian Cowley and Antigravity (Google DeepMind).


License

Licensed under the MIT License. Copyright (c) 2026 Ian Cowley.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Glacier.Plot:

Package Downloads
Glacier.StatsViz

Declarative statistical graphics grammar and vectorized KDE engine for .NET 10. Native C# alternative to Seaborn featuring AVX-512 Gaussian KDE, violin plots, correlation heatmaps, regression trendlines, and pair plot grids.

Glacier.Mobile

High-performance cross-platform mobile application runtime and declarative reactive UI engine for .NET 10 Native AOT. Zero-allocation touch pipeline, 120Hz GPU composition via SkiaSharp/Vulkan/Metal, and sub-200ms cold startup. Native C# alternative to Python Kivy.

Glacier.Desktop

Hardware-accelerated native desktop GUI engine and virtualized data grid for .NET 10 Native AOT. Sub-15ms cold startup, SIMD Kogge-Stone layout calculations, and 1,000,000+ row virtual grids at 120 FPS. Native C# alternative to Python Tkinter and PyQt.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 51 9/12/2026
1.0.0 89 9/11/2026