FastCharts.Wpf 1.2.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package FastCharts.Wpf --version 1.2.0
                    
NuGet\Install-Package FastCharts.Wpf -Version 1.2.0
                    
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="FastCharts.Wpf" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FastCharts.Wpf" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="FastCharts.Wpf" />
                    
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 FastCharts.Wpf --version 1.2.0
                    
#r "nuget: FastCharts.Wpf, 1.2.0"
                    
#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 FastCharts.Wpf@1.2.0
                    
#: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=FastCharts.Wpf&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=FastCharts.Wpf&version=1.2.0
                    
Install as a Cake Tool

FastCharts - High-Performance .NET Charting Library

<div align="center"> <img src="mabinogi-icon.png" alt="FastCharts" width="128" height="128">

NuGet Downloads Build Status License: MIT </div>

🌟 What is FastCharts?

FastCharts is a high-performance .NET charting library designed for real-time applications, financial dashboards, and data visualization scenarios requiring smooth rendering of massive datasets (10M+ points).

⚑ Key Features

  • πŸš€ Real-time Performance: 60 FPS rendering with LTTB decimation
  • πŸ“Š Rich Chart Types: Line, Scatter, Bar, Area, Band, OHLC, ErrorBar
  • 🎯 Multi-Axis Support: Independent left/right Y axes
  • πŸ“ˆ Advanced Axes: Linear, Logarithmic, Category with custom bases
  • πŸ”„ Streaming Data: Rolling windows with efficient append operations
  • 🎨 Interactive: Pan, zoom, crosshair, pinned tooltips
  • πŸ“ Annotations: Lines, ranges, labels with full styling
  • πŸ’Ύ Export Ready: PNG + SVG (vector) export, clipboard integration
  • 🌐 Cross-Platform: Windows, macOS, Linux support
  • πŸ—οΈ MVVM Ready: Full WPF integration with ReactiveUI

🎯 Perfect For

  • Financial Applications: Trading platforms, market analysis
  • Real-Time Dashboards: IoT monitoring, system metrics
  • Scientific Visualization: Research data, sensor readings
  • Business Intelligence: KPI dashboards, analytics
  • Desktop Applications: WPF apps with rich data visualization

πŸ“¦ Quick Start

dotnet add package FastCharts.Wpf

Basic Usage

XAML:

<Window xmlns:fc="clr-namespace:FastCharts.Wpf.Controls;assembly=FastCharts.Wpf">
    <fc:FastChart Model="{Binding ChartModel}" />
</Window>

C# Code β€” a curve from a dictionary, zero ceremony:

using FastCharts.Core;

var model = new ChartModel();

// Any Dictionary<double, double> plots as a sorted line in one call
var measures = new Dictionary<double, double> { [0] = 10, [1] = 20, [2] = 15, [3] = 25 };
model.AddSeries(measures, "Sales Data");

// Y values only? X becomes the index
model.AddSeries(new[] { 10.0, 20.0, 15.0, 25.0 }, "Quick values");

// Other kinds, same one-liner
model.AddSeries(measures, ChartKind.Area);      // or Scatter, Bar, StepLine

// Make it pretty in two more lines
var curve = model.AddSeries(measures, "Smooth");
curve.Smoothing = LineSmoothing.Spline;         // smooth curve
curve.ShowMarkers = true;                       // dots on data points
model.Theme = ChartThemes.Dark;                 // runtime theme switch

// Bind to your ViewModel
this.DataContext = new { ChartModel = model };

Need full control? Build the series yourself:

using FastCharts.Core.Series;
using FastCharts.Core.Primitives;

model.AddSeries(new LineSeries(new[] { new PointD(0, 10), new PointD(1, 20) })
{
    Title = "Sales Data",
    StrokeThickness = 2
});

Real-Time Streaming Example

// Create streaming series with rolling window
var streamingSeries = new StreamingLineSeries {
    Title = "Live Data",
    MaxPointCount = 1000, // Keep last 1000 points
    RollingWindowDuration = TimeSpan.FromMinutes(5)
};

// Add real-time data
streamingSeries.AppendPoint(new PointD(DateTime.Now.Ticks, sensorValue));

model.AddSeries(streamingSeries);

Multi-Axis Example

// Create chart with multiple Y axes
var model = new ChartModel();

// Add left axis series (temperature)
model.AddSeries(new LineSeries(temperatureData) {
    Title = "Temperature (Β°C)",
    YAxisIndex = 0, // Left Y axis
    Color = ColorRgba.Red
});

// Add right axis series (pressure) 
model.AddSeries(new LineSeries(pressureData) {
    Title = "Pressure (hPa)", 
    YAxisIndex = 1, // Right Y axis
    Color = ColorRgba.Blue
});

πŸ—οΈ Architecture

FastCharts uses a clean, modular architecture:

β”œβ”€β”€ FastCharts.Core          # Core algorithms & abstractions
β”œβ”€β”€ FastCharts.Rendering.Skia # Cross-platform rendering engine
└── FastCharts.Wpf           # WPF controls & MVVM integration

Package Selection Guide

Scenario Packages Needed
WPF Desktop App FastCharts.Wpf (includes others)
Cross-Platform Console FastCharts.Core + FastCharts.Rendering.Skia
Web API Chart Generation FastCharts.Core + FastCharts.Rendering.Skia
Business Logic Only FastCharts.Core

πŸ“Š Advanced Features

LTTB Decimation for Massive Datasets

var largeSeries = new LineSeries(millionsOfPoints) {
    EnableAutoResampling = true // Automatically reduces to screen resolution
};
// Maintains visual fidelity while ensuring 60 FPS performance

Performance Metrics Overlay

model.AddBehavior(new MetricsOverlayBehavior {
    ShowDetailed = true,
    Position = MetricsPosition.TopLeft
});
// Press F3 to toggle, F4 for detail level, F5 to reset

MVVM Data Binding (Observable Series)

// Bind a chart series directly to your ViewModel collection
var readings = new ObservableCollection<SensorReading>();

var series = new ObservableLineSeries(readings, nameof(SensorReading.Time), nameof(SensorReading.Temperature))
{
    Title = "Temperature",
    RefreshThrottle = TimeSpan.FromMilliseconds(50) // coalesce rapid updates (optional)
};

model.AddSeries(series);          // renders like any other series
readings.Add(new SensorReading()); // chart updates automatically

Interactive Behaviors

model.AddBehavior(new PanBehavior());
model.AddBehavior(new ZoomBehavior());
model.AddBehavior(new CrosshairBehavior());
model.AddBehavior(new PinnedTooltipBehavior()); // Right-click to pin tooltips

Annotations

// Add horizontal line annotation
model.AddAnnotation(new LineAnnotation {
    Type = LineAnnotationType.Horizontal,
    Value = 100,
    Label = "Target Value",
    Color = ColorRgba.Green
});

// Add range highlight
model.AddAnnotation(new RangeAnnotation {
    Type = RangeAnnotationType.Horizontal, 
    StartValue = 90,
    EndValue = 110,
    FillColor = ColorRgba.Green.WithAlpha(0.2f),
    Label = "Acceptable Range"
});

πŸš€ Performance

  • Rendering Speed: Up to 60 FPS for interactive charts
  • Memory Efficiency: Optimized for large datasets (10M+ points)
  • LTTB Algorithm: Reduces data while preserving visual fidelity
  • Hardware Acceleration: GPU-accelerated rendering via SkiaSharp
  • Streaming Optimized: Real-time updates with minimal overhead

🌐 Framework Support

Framework FastCharts.Core Rendering.Skia WPF
.NET Standard 2.0 βœ… βœ… ❌
.NET Framework 4.8 βœ… βœ… βœ…
.NET 6 βœ… βœ… βœ…
.NET 8 βœ… βœ… βœ…

Platforms: Windows, macOS, Linux (Core + Skia), Windows only (WPF)

Linux note: FastCharts.Rendering.Skia relies on SkiaSharp. On Linux, add the SkiaSharp.NativeAssets.Linux (or SkiaSharp.NativeAssets.Linux.NoDependencies) package to your application so the native libSkiaSharp library is deployed.

πŸ“– Documentation

🀝 Contributing

We welcome contributions! See our Contributing Guide for details.

Development Setup

git clone https://github.com/MabinogiCode/FastCharts.git
cd FastCharts
dotnet restore
dotnet build
dotnet test # full test suite should pass

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments


<div align="center"> <strong>Made with ❀️ for the .NET community</strong><br> <sub>FastCharts - Where performance meets visualization</sub> </div>

Product Compatible and additional computed target framework versions.
.NET net6.0-windows10.0.19041 is compatible.  net7.0-windows was computed.  net8.0-windows was computed.  net8.0-windows10.0.19041 is compatible.  net9.0-windows was computed.  net10.0-windows was computed. 
.NET Framework net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.4.0 71 7/8/2026
1.2.0 82 7/6/2026
1.0.0 291 12/15/2025

FastCharts v1.2.0 β€” "Everyday chart"

- Markers on LineSeries (ShowMarkers, MarkerSize, MarkerShape incl. Diamond/Cross/Plus)
- Spline smoothing: series.Smoothing = LineSmoothing.Spline
- SVG vector export: SkiaChartRenderer.ExportSvg / ChartExportService.ExportToSvgFile
- Dynamic themes: ChartThemes.Light/Dark/HighContrast + CustomTheme palettes
- KISS: model.AddSeries(data, ChartKind.Area|Scatter|Bar|StepLine)

See CHANGELOG.md for details.