Repository navigation
Home
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 MatPlotLibNetPlt.Create()
.AddSubPlot(1, 1, 1, ax => ax.Plot(x, y, s => s.Label = "signal"))
.SaveSvg("chart.svg");| 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.
| 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 |
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.
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.
MatPlotLibNet 1.22.0
- Home
- Getting Started
- Fluent Cheatsheet
- Examples — each release in code
-
Package Map
- MatPlotLibNet — the core package
- Chart Types
- Styling
- Advanced
- Streaming
- Bidirectional SignalR
- Interactive Controls
- MCP Server
- Verso
- Notebooks
- Accessibility
- International Text
- Benchmarks
- Roadmap
- Contributing