Skip to content
H.P. Gansevoort edited this page Sep 12, 2026 · 90 revisions

MatPlotLibNet Wiki

Matplotlib-inspired charting for .NET. Server-rendered SVG / PNG / PDF / animated GIF, an MCP server so an AI agent can draw with it, 83 series types, 13 map projections with embedded Natural Earth data, 30 themes, LaTeX-style MathText, O(1) streaming with 53 technical indicators, a control room (Plt.OpsDashboard() — KPI tiles, state timelines, one shared trend window), and native controls for Blazor, WPF, MAUI, Avalonia, Uno and ASP.NET Core. Fluent API, DI-friendly — no JavaScript framework, no WebView, no SaaS.

1.16.0 — current release. A chart can be read, not only seen. figure.ToDataTables() hands back what the figure says as tables of typed columns and cells, each one writing itself as HTML, Markdown or CSV, and every host serves it: an endpoint beside the SVG one, a ShowDataTable disclosure on the Blazor component, a chartDataTable field on the GraphQL schema, and a fifth MCP tool. Alt text says what a chart is; the table carries what it says, which is what a screen reader can never get out of an <svg role="img">. The same release makes a streaming snapshot incapable of showing a point or a candle that never existed. See Accessibility.

1.15 before it opened the library to agents: MatPlotLibNet.Mcp, a Model Context Protocol server a host starts over stdio, so Claude or VS Code can render any of these chart types from a JSON spec and look at the result. It is listed in the official MCP Registry as io.github.xkqg/matplotlibnet. See MCP Server.

1.14 before that was control-room work: the pack itself, then the fixes and extensions it asked for (a secondary Y axis that is a full citizen, streaming that draws in SVG, 3-D axis titles that clear their own labels, one anatomy per row of tiles, and a hidden axis that reserves no room — which is what finally let a row of tiles be as wide as it looks). · NuGet · Changelog · License: MIT

dotnet add package MatPlotLibNet
Plt.Create()
   .AddSubPlot(1, 1, 1, ax => ax.Plot(x, y, s => s.Label = "signal"))
   .SaveSvg("chart.svg");

Start here

Page For
Getting Started install, first chart, output formats, subplots
Fluent Cheatsheet one page: Plt · FigureBuilder · AxesBuilder
Chart Types all 83 series with code — including the control room
Package Map which of the 14 NuGet + 3 npm packages you need
Styling · MatplotlibThemes themes, colours, fonts, layout
Advanced animation, geo projections, MathText, DI
Streaming live data, O(1) ring buffers, indicators
Bidirectional SignalR push charts to Blazor / Angular / React / Vue
Interactive Controls · Keyboard Shortcuts pan, zoom, brush-select, hotkeys
Notebooks Polyglot / Jupyter
Accessibility The data table beside the chart, ARIA, contrast, screen readers
Benchmarks render and export timings
Roadmap · Contributing where it is going, how to help

Also: Playground · Cookbook · API Reference.

Who it is for

You are… You get…
Blazor / ASP.NET Core <MplChart> and <MplLiveChart>, SignalR push, a REST endpoint — wired with standard DI
WPF / MAUI / Avalonia / Uno native controls (SkiaSharp or Microsoft.Maui.Graphics), pan / zoom / brush-select, no WebView
Data scientist inline SVG in notebooks, plotting straight from Microsoft.Data.Analysis.DataFrame
Trading / finance candlestick, OHLC, 53 indicators, drawing tools, backtest panels, RRG
Ops / control room Plt.OpsDashboard() — KPI tiles, state timelines, one shared trend window
Backend / headless render SVG, PNG, PDF or GIF server-side with zero UI dependencies
Angular / React / Vue TypeScript clients on the same hub and the same chart definitions

What it is not

Not a JavaScript wrapper, not a WebView host, not a hosted service. Charts are built and rendered in .NET; what leaves the process is a picture or a chart definition.

Quality bar

Every class passes a strict per-class coverage gate at ≥90 % line and branch (currently 659 classes, 99.6 % line / 97.2 % branch) across 10,025 tests. Rendering is verified against matplotlib pixel-fidelity fixtures.

Questions or something missing? Open a Discussion or an Issue — releases follow what people actually need.

Clone this wiki locally