MatPlotLibNet
offiziellÜbergib ihm das JSON für ein Diagramm und es rendert ein PNG, das das Modell tatsächlich ansehen kann — 83 Diagrammtypen, SVG und PDF werden in Dateien geschrieben, läuft lokal als .NET-Tool.
Was kann man mit MatPlotLibNet MCP machen?
- Diagramme aus JSON-Spezifikationen rendern – Fordern Sie ein Diagramm über
render_chartan und erhalten Sie ein PNG sowie eine Textzusammenfassung des Gezeichneten. - Diagramme in Dateien speichern – Verwenden Sie
save_chart, um ein Diagramm als PNG, SVG oder PDF zu exportieren, und erhalten Sie den geschriebenen Dateipfad. - Diagrammfunktionen entdecken – Fragen Sie
list_chart_typesab, um alle 83 unterstützten Serientypen zu sehen, von Liniendiagrammen bis zu 3D-Oberflächen. - Diagrammschemata validieren – Erhalten Sie feldbezogenes Fehlerfeedback von
describe_chart_schema, wenn eine Diagrammspezifikation fehlerhaft ist.
Dokumentation
MatPlotLibNet
Eine .NET 10 / .NET 8-Diagrammbibliothek, inspiriert von matplotlib: fließende API, DI-freundlich,
serverseitiger SVG-/PNG-/PDF-/animierter-GIF-Export, ein MCP-Server, damit ein KI-Agent damit zeichnen kann, und 83 Serientypen. Enthält 13 Kartenprojektionen und eingebettete
Natural-Earth-Daten, 30 Themes, LaTeX-artiges MathText, O(1)-Streaming mit 53 technischen Indikatoren, ein Kontrollraum
(Plt.OpsDashboard() — KPI-Kacheln, Zustandszeitlinien, ein gemeinsames Trendfenster) und native Steuerelemente für Blazor, WPF,
MAUI, Avalonia, Uno und ASP.NET Core, sowie TypeScript-Clients für Angular, React und Vue. Kein JavaScript-Framework,
kein WebView, kein SaaS.
Wohin das führt
Die 1.15-Linie öffnet die Bibliothek für Agenten: MatPlotLibNet.Mcp ist ein Model-Context-Protocol-Server, sodass ein
Modell jeden dieser Diagrammtypen aus einer JSON-Spezifikation rendern und das Ergebnis ansehen kann — und erfährt, welches Feld
falsch ist, wenn die Spezifikation keine ist.
Die 1.14-Linie davor war Kontrollraum-Arbeit: Plt.OpsDashboard() und die Kachel-Anatomie kamen damit,
und die Releases seitdem sind die Korrekturen und Erweiterungen, die eine Live-Operator-Wand verlangte — eine sekundäre Y-Achse, die
ein vollwertiger Bürger ist, Streaming, das in SVG zeichnet, 3-D-Achsentitel, die ihre eigenen Beschriftungen löschen, Kachelbeschriftungen, die
umbrechen und innerhalb ihrer Kachel bleiben, und ein Ops-Fenster, dessen Ticks als Zeit lesbar sind.
Danach ist der Rhythmus gemeinschaftsgetrieben: Fehlerkorrekturen, Dokumentation und was auch immer echte Nutzung hervorbringt. Eröffnen Sie eine Discussion oder ein Issue — das steuert das nächste Release. Jedes Release, mit seinen Migrationshinweisen, steht im CHANGELOG.
Qualitätsmaßstab: eine strenge Pro-Klasse-Abdeckungsschwelle bei ≥90 % Zeilen und Zweigen (679 Klassen, 99,6 % / 97,3 %) über 11.022 Tests, wobei das Rendern gegen matplotlib-Pixeltreue-Fixtures verifiziert wird.
Dokumentation
- Wiki — Einstieg, Spickzettel, alle 83 Diagrammtypen, der Kontrollraum, Styling, Streaming, SignalR, Pakete
- Cookbook — Copy-Paste-Beispiele mit gerendertem Output
- Playground — Diagramme live im Browser ausprobieren
- API-Referenz — aus den XML-Dokumenten generiert
- Benchmarks · Abdeckungsrichtlinie · CHANGELOG
Pakete
| Paket | Installation | Was es tut |
|---|---|---|
| MatPlotLibNet | dotnet add package MatPlotLibNet | Kern: Modelle, fließende API, SVG-Rendering, JSON, Transformationen |
| MatPlotLibNet.DataFrame | dotnet add package MatPlotLibNet.DataFrame | Microsoft.Data.Analysis.DataFrame-Erweiterungsmethoden — Plotten, Indikatoren (SMA/EMA/RSI/MACD/…) und polynomiale Regression aus benannten Spalten |
| MatPlotLibNet.Skia | dotnet add package MatPlotLibNet.Skia | PNG-, PDF- und animierter-GIF-Export über SkiaSharp |
| MatPlotLibNet.Blazor | dotnet add package MatPlotLibNet.Blazor | MplChart + MplLiveChart-Razor-Komponenten mit SignalR |
| MatPlotLibNet.AspNetCore | dotnet add package MatPlotLibNet.AspNetCore | REST-Endpunkte, SignalR-Hub, IChartPublisher |
| MatPlotLibNet.Interactive | dotnet add package MatPlotLibNet.Interactive | figure.ShowAsync() — Browser-Popup, kein Server nötig |
| MatPlotLibNet.GraphQL | dotnet add package MatPlotLibNet.GraphQL | GraphQL-Abfragen + Abonnements über HotChocolate |
| MatPlotLibNet.Maui | dotnet add package MatPlotLibNet.Maui | Natives MplChartView über Microsoft.Maui.Graphics |
| MatPlotLibNet.Avalonia | dotnet add package MatPlotLibNet.Avalonia | Natives MplChartControl für Avalonia 12 — Skia-Backend, optionale lokale Interaktion |
| MatPlotLibNet.Uno | dotnet add package MatPlotLibNet.Uno | Natives MplChartElement für Uno Platform (WinUI 3 / Android / iOS / macCatalyst) |
| MatPlotLibNet.Wpf | dotnet add package MatPlotLibNet.Wpf | Natives WPF-MplChartControl über SkiaSharp — alle 9 Interaktionsmodifikatoren |
| MatPlotLibNet.Geo | dotnet add package MatPlotLibNet.Geo | 13 Kartenprojektionen, GeoJSON-Parser, Natural-Earth-110m-Daten, geografische Polygone |
| MatPlotLibNet.Notebooks | #r "nuget: MatPlotLibNet.Notebooks" | Inline-SVG in Polyglot-/Jupyter-Notebooks |
| MatPlotLibNet.Mcp | dnx MatPlotLibNet.Mcp | MCP-Server — ein KI-Agent rendert Diagramme über stdio (Cookbook) |
| @matplotlibnet/angular | npm install @matplotlibnet/angular | Angular-Komponenten + TypeScript-SignalR-Client |
| @matplotlibnet/react | npm install @matplotlibnet/react | React-Hooks + Komponenten + TypeScript-SignalR-Client |
| @matplotlibnet/vue | npm install @matplotlibnet/vue | Vue-3-Composables + TypeScript-SignalR-Client |
Schnellstart
using MatPlotLibNet;
using MatPlotLibNet.Styling;
double[] x = [1, 2, 3, 4, 5];
double[] y = [2, 4, 3, 5, 1];
Plt.Create()
.WithTitle("My First Chart")
.WithTheme(Theme.Dark)
.Plot(x, y, s => { s.Color = Color.Blue; s.Label = "Data"; })
.WithLegend()
.Save("chart.svg");
Funktionen
83 Serientypen — Linie, Streuung, Balken, Histogramm, Kreis, Box, Violine, Heatmap, Kontur, Candlestick, OHLC, Treemap, Sunburst, Sankey, Polar, Polar-Heatmap, 3D-Oberfläche, Bar3D, PlanarBar3D, Line3D, Trisurf3D, Contour3D, Quiver3D, Voxels, Text3D, Radar, Wasserfall, Trichter, Messgerät, Statistik-Kachel (Einzelwert-KPI), Zustandszeitlinie (diskrete Zustandssegmente über Zeit), Paar-Gitter, relative Rotationsgrafik, Streaming-Linie/Streuung/Signal/Candlestick und mehr.
MCP-Server — Diagramme für einen KI-Agenten — MatPlotLibNet.Mcp ist ein
Model Context Protocol-Server, der als .NET-Tool ausgeliefert wird, das ein Host über stdio startet. Vier Werkzeuge: render_chart (PNG plus eine Textzusammenfassung von
dem, was gezeichnet wurde), save_chart (PNG/SVG/PDF in eine Datei, die den geschriebenen Pfad zurückgibt), list_chart_types und
describe_chart_schema. Die Spezifikation ist das eigene Figure-JSON der Bibliothek, sodass alles, was die Bibliothek zeichnet, ein
Agent anfordern kann — und der Server lehnt eine falsche Spezifikation nach Feldnamen ab, bevor er rendert, statt ein leeres
Bild zurückzugeben. Siehe das Cookbook.
{ "servers": { "MatPlotLibNet.Mcp": { "type": "stdio", "command": "dnx", "args": ["MatPlotLibNet.Mcp", "--yes"] } } }
Kontrollraum — Plt.OpsDashboard() setzt einen Operator-Bildschirm zusammen: KPI-Kacheln oben, Zustandszeitlinien darunter und ein gemeinsames Trendpanel, alles an ein vom Aufrufer geliefertes Zeitfenster gebunden (die Bibliothek liest nie die Wanduhr). Die Kachel trägt ein Target, eine umbrechende mehrzeilige Caption, ein Inline-Sparkline und ein Hatch, das keine Information bedeutet; Theme.Alarm benennt die reservierten Alarmfarben und vier Operator-Hintergründe werden mitgeliefert. BulletGraphSeries ersetzt das radiale Messgerät.
Native UI-Steuerelemente — MplChartControl für Avalonia 12 und MplChartElement für Uno Platform rendern Diagramme nativ über SkiaSharp — kein Browser, kein WebView, kein SignalR nötig. 9 Interaktionsmodifikatoren: Schwenken (Ziehen), Zoomen (Scrollen), 3D-Rotation (Rechtsziehen), Rechteck-Zoom (Strg+Ziehen), Pinsel-Auswahl (Umschalt+Ziehen), Spannen-Auswahl (Alt+Ziehen), Legenden-Umschalten (Klicken), Fadenkreuz (passiv), Hover-Tooltip. Symbolleisten-Zustandsmodell, Verlauf (Zurück/Vor), Daten-Cursor (Klicken-zum-Anheften), Tick-Spiegelung, enge Ränder.
MathText — LaTeX-artige Inline-Mathematik in jedem Label oder Titel: $\alpha^{2}$, $\frac{a}{b}$, $\sqrt{x}$, $\hat{x}$, $\mathbf{F}$, $\mathbb{R}$. 96 Symbolzuordnungen (Griechisch, mathematische Operatoren, Pfeile, Relationen, Mengen/Logik, Tafel-Fett), Brüche, Quadratwurzeln, Akzente, Schriftvarianten, Abstände und skalierende Begrenzer.
3-D-Diagramme — 12 Serientypen: Oberfläche, Scatter3D, Bar3D, PlanarBar3D, Line3D, Trisurf3D (Delaunay), Contour3D (Marching Squares), Quiver3D (Vektorfeld), Voxels (face-culled Würfel), Text3D (Annotationen). Vollständige Projection3D-Pipeline, DepthQueue3D-Maleralgorithmus, Vec3.FaceNormal + Color.Shade()/Color.Modulate()-erweiterungsbasierte Schattierung, Svg3DRotationScript-clientseitige Rotation mit Tiefen-Neusortierung, kamerabgeleitete Rückseiten (CubeFaceSelection — die Paneele, Würfelkanten, Wandgitter und Tick-Reihen folgen der Kamera in jedem Azimut, serverseitig und während eines Ziehens), konfigurierbares Pane3DConfig (Boden-/Wandfarben) und 3D-Colorbar-Unterstützung.
Streaming & Echtzeit — StreamingLineSeries, StreamingScatterSeries, StreamingSignalSeries, StreamingCandlestickSeries unterstützt durch DoubleRingBuffer mit AppendPoint(x, y). StreamingFigure bietet gedrosseltes Neu-Rendering und automatisch skalierende Achsen (SlidingWindow, StickyRight, AutoScale). 11 Streaming-Indikatoren (SMA, EMA, RSI, Bollinger, MACD, OBV, ATR, Stochastic, WilliamsR, CCI, VWAP) hängen sich automatisch an Candlestick-Daten. Streaming-Steuerelemente für Avalonia, Uno, MAUI, Blazor und ASP.NET Core. SVG-Diff-Engine für Bandbreitenoptimierung. Rx-IObservable<T>-Adapter.
Geografische Projektionen — MatPlotLibNet.Geo-Paket mit 5 Kartenprojektionen (PlateCarree, Mercator, Robinson, Orthographic, LambertConformal), GeoJSON-Parser, eingebettete Natural-Earth-110m-Daten und GeoPolygonSeries für Küstenlinien/Grenzen/Choroplethen. Symlog-Achsenskala für Daten, die positive und negative Bereiche umfassen.
Bidirektionales SignalR — serverautoritative interaktive Diagramme mit Mutationsereignissen (Zoomen, Schwenken, Zurücksetzen, Legenden-Umschalten) und Benachrichtigungsereignissen (Pinsel-Auswahl, Hover). Gestapelte Ereignishierarchie, natürliches Zusammenführen, Pro-Aufrufer-Hover-Antworten.
142 Colormaps — viridis, plasma, turbo, coolwarm und 138 weitere (71 Basismaps, jede mit einer automatisch registrierten umgekehrten _r-Variante). NumPy-artige SIMD-Numerik (Vec, Mat, Linalg, Fft). Barrierefreiheit (ARIA, Tastatur, Okabe-Ito-Palette, Hochkontrast-Theme). Matplotlib-ähnliche Themes. DataFrame-Integration mit 53 technischen Indikatoren. Gebrochene Achsen. Publikationsqualität-SVG/PNG/PDF/GIF-Export.
Lizenz
MIT — frei für jede Nutzung, Open-Source oder kommerziell, ohne Copyleft-Bedingungen.