MatPlotLibNet
oficialEntregue o JSON de um gráfico e ele renderiza um PNG que o modelo pode realmente visualizar — 83 tipos de gráfico, SVG e PDF gravados em arquivo, executando localmente como uma ferramenta .NET.
O que você pode fazer com MatPlotLibNet MCP?
- Renderizar gráficos a partir de especificações JSON — Solicite um gráfico via
render_charte receba um PNG além de um resumo em texto do que foi desenhado. - Salvar gráficos em arquivos — Use
save_chartpara exportar um gráfico como PNG, SVG ou PDF e receba o caminho do arquivo gravado. - Descobrir capacidades de gráficos — Consulte
list_chart_typespara ver todos os 83 tipos de séries suportados, de gráficos de linhas a superfícies 3D. - Validar esquemas de gráficos — Obtenha feedback de erros em nível de campo com
describe_chart_schemaquando uma especificação de gráfico estiver malformada.
Documentação
MatPlotLibNet
Uma biblioteca de gráficos para .NET 10 / .NET 8 inspirada no matplotlib: API fluente, compatível com DI,
exportação server-side de SVG / PNG / PDF / GIF animado, um servidor MCP para que um agente de IA possa desenhar com ela, e 83 tipos de séries. Acompanha 13 projeções de mapa e dados
embutidos do Natural Earth, 30 temas, MathText estilo LaTeX, streaming O(1) com 53 indicadores técnicos, uma sala de controle
(Plt.OpsDashboard() — tiles de KPI, linhas do tempo de estado, uma janela de tendência compartilhada), e controles nativos para Blazor, WPF,
MAUI, Avalonia, Uno e ASP.NET Core, além de clientes TypeScript para Angular, React e Vue. Sem framework JavaScript,
sem WebView, sem SaaS.
Para onde isso está indo
A linha 1.15 abre a biblioteca para agentes: MatPlotLibNet.Mcp é um servidor Model Context Protocol, então um
modelo pode renderizar qualquer um desses tipos de gráfico a partir de uma especificação JSON e ver o resultado — e é informado qual campo está
errado quando a especificação não é uma delas.
A linha 1.14 anterior foi o trabalho da sala de controle: Plt.OpsDashboard() e a anatomia dos tiles chegaram com ela,
e os lançamentos desde então são as correções e extensões que uma parede de operador ao vivo pediu — um eixo Y secundário que é
um cidadão de pleno direito, streaming que desenha em SVG, títulos de eixo 3D que limpam seus próprios rótulos, legendas de tile que
quebram linha e permanecem dentro do tile, e uma janela de operações cujas marcações são lidas como tempo.
Depois disso, o ritmo é conduzido pela comunidade: correções de bugs, documentação e o que o uso real trouxer. Abra uma Discussão ou uma Issue — é isso que orienta o próximo lançamento. Cada lançamento, com suas notas de migração, está no CHANGELOG.
Padrão de qualidade: uma porta de cobertura estrita por classe em ≥90% de linha e ramo (679 classes, 99,6% / 97,3%) em 11.022 testes, com renderização verificada contra fixtures de fidelidade de pixels do matplotlib.
Documentação
- Wiki — primeiros passos, folha de consulta rápida, todos os 83 tipos de gráfico, a sala de controle, estilização, streaming, SignalR, pacotes
- Cookbook — exemplos de copiar e colar com saída renderizada
- Playground — experimente gráficos ao vivo no navegador
- Referência da API — gerada a partir dos documentos XML
- Benchmarks · Política de cobertura · CHANGELOG
Pacotes
| Pacote | Instalação | O que faz |
|---|---|---|
| MatPlotLibNet | dotnet add package MatPlotLibNet | Núcleo: modelos, API fluente, renderização SVG, JSON, transformações |
| MatPlotLibNet.DataFrame | dotnet add package MatPlotLibNet.DataFrame | Métodos de extensão Microsoft.Data.Analysis.DataFrame — plote, indicadores (SMA/EMA/RSI/MACD/…) e regressão polinomial a partir de colunas nomeadas |
| MatPlotLibNet.Skia | dotnet add package MatPlotLibNet.Skia | Exportação PNG, PDF e GIF animado via SkiaSharp |
| MatPlotLibNet.Blazor | dotnet add package MatPlotLibNet.Blazor | Componentes Razor MplChart + MplLiveChart com SignalR |
| MatPlotLibNet.AspNetCore | dotnet add package MatPlotLibNet.AspNetCore | Endpoints REST, hub SignalR, IChartPublisher |
| MatPlotLibNet.Interactive | dotnet add package MatPlotLibNet.Interactive | figure.ShowAsync() — popup no navegador, sem necessidade de servidor |
| MatPlotLibNet.GraphQL | dotnet add package MatPlotLibNet.GraphQL | Consultas GraphQL + assinaturas via HotChocolate |
| MatPlotLibNet.Maui | dotnet add package MatPlotLibNet.Maui | MplChartView nativo via Microsoft.Maui.Graphics |
| MatPlotLibNet.Avalonia | dotnet add package MatPlotLibNet.Avalonia | MplChartControl nativo para Avalonia 12 — backend Skia, interação local opcional |
| MatPlotLibNet.Uno | dotnet add package MatPlotLibNet.Uno | MplChartElement nativo para Uno Platform (WinUI 3 / Android / iOS / macCatalyst) |
| MatPlotLibNet.Wpf | dotnet add package MatPlotLibNet.Wpf | MplChartControl nativo para WPF via SkiaSharp — todos os 9 modificadores de interação |
| MatPlotLibNet.Geo | dotnet add package MatPlotLibNet.Geo | 13 projeções de mapa, parser GeoJSON, dados Natural Earth 110m embutidos, polígonos geográficos |
| MatPlotLibNet.Notebooks | #r "nuget: MatPlotLibNet.Notebooks" | SVG inline em notebooks Polyglot / Jupyter |
| MatPlotLibNet.Mcp | dnx MatPlotLibNet.Mcp | Servidor MCP — um agente de IA renderiza gráficos via stdio (cookbook) |
| @matplotlibnet/angular | npm install @matplotlibnet/angular | Componentes Angular + cliente TypeScript SignalR |
| @matplotlibnet/react | npm install @matplotlibnet/react | Hooks React + componentes + cliente TypeScript SignalR |
| @matplotlibnet/vue | npm install @matplotlibnet/vue | Composables Vue 3 + cliente TypeScript SignalR |
Início rápido
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");
Recursos
83 tipos de séries — linha, dispersão, barra, histograma, pizza, caixa, violino, mapa de calor, contorno, candlestick, OHLC, treemap, sunburst, Sankey, polar, mapa de calor polar, superfície 3D, Bar3D, PlanarBar3D, Line3D, Trisurf3D, Contour3D, Quiver3D, Voxels, Text3D, radar, cascata, funil, medidor, tile de estatística (KPI de valor único), linha do tempo de estado (segmentos de estado discreto ao longo do tempo), grade de pares, gráfico de rotação relativa, linha/dispersão/sinal/candlestick em streaming, e mais.
Servidor MCP — gráficos para um agente de IA — MatPlotLibNet.Mcp é um
servidor Model Context Protocol, distribuído como uma ferramenta .NET que um host inicia via stdio. Quatro ferramentas: render_chart (PNG mais um resumo em texto do
que foi desenhado), save_chart (PNG/SVG/PDF para um arquivo, retornando o caminho que escreveu), list_chart_types e
describe_chart_schema. A especificação é o próprio JSON de figura da biblioteca, então qualquer coisa que a biblioteca desenha, um agente pode
solicitar — e o servidor recusa uma especificação errada pelo nome do campo antes de renderizar, em vez de retornar uma imagem em branco.
Veja o cookbook.
{ "servers": { "MatPlotLibNet.Mcp": { "type": "stdio", "command": "dnx", "args": ["MatPlotLibNet.Mcp", "--yes"] } } }
Sala de controle — Plt.OpsDashboard() compõe uma tela de operador: tiles de KPI no topo, linhas do tempo de estado abaixo deles, e um painel de tendência compartilhado, todos fixados em uma janela de tempo fornecida pelo chamador (a biblioteca nunca lê o relógio de parede). O tile carrega um Target, uma Caption multilinha com quebra automática, um sparkline inline e um Hatch que significa sem informação; Theme.Alarm nomeia as cores de alarme reservadas e quatro fundos de operador acompanham. BulletGraphSeries substitui o medidor radial.
Controles de UI nativos — MplChartControl para Avalonia 12 e MplChartElement para Uno Platform renderizam gráficos nativamente via SkiaSharp — sem navegador, sem WebView, sem SignalR necessário. 9 modificadores de interação: pan (arrastar), zoom (rolar), rotação 3D (arrastar com botão direito), zoom retangular (Ctrl+arrastar), seleção por pincel (Shift+arrastar), seleção por intervalo (Alt+arrastar), alternância de legenda (clique), crosshair (passivo), tooltip de hover. Modelo de estado da barra de ferramentas, histórico de visualização (voltar/avançar), cursor de dados (clique para fixar), espelhamento de marcações, margens apertadas.
MathText — matemática inline estilo LaTeX em qualquer rótulo ou título: $\alpha^{2}$, $\frac{a}{b}$, $\sqrt{x}$, $\hat{x}$, $\mathbf{F}$, $\mathbb{R}$. 96 mapeamentos de símbolos (grego, operadores matemáticos, setas, relações, conjuntos/lógica, blackboard bold), frações, raízes quadradas, acentos, variantes de fonte, espaçamento e delimitadores de escala.
Gráficos 3D — 12 tipos de séries: Surface, Scatter3D, Bar3D, PlanarBar3D, Line3D, Trisurf3D (Delaunay), Contour3D (marching squares), Quiver3D (campo vetorial), Voxels (cubos com remoção de faces), Text3D (anotações). Pipeline completo de Projection3D, algoritmo do pintor DepthQueue3D, sombreamento baseado em extensão Vec3.FaceNormal + Color.Shade()/Color.Modulate(), rotação client-side Svg3DRotationScript com reordenação por profundidade, faces traseiras derivadas da câmera (CubeFaceSelection — os painéis, bordas do cubo, grades de parede e marcações de linha seguem a câmera em qualquer azimute, no servidor e durante um arrasto), Pane3DConfig configurável (cores de piso/parede) e suporte a colorbar 3D.
Streaming e tempo real — StreamingLineSeries, StreamingScatterSeries, StreamingSignalSeries, StreamingCandlestickSeries apoiados por DoubleRingBuffer com AppendPoint(x, y). StreamingFigure fornece re-renderização limitada e eixos com auto-escala (SlidingWindow, StickyRight, AutoScale). 11 indicadores de streaming (SMA, EMA, RSI, Bollinger, MACD, OBV, ATR, Stochastic, WilliamsR, CCI, VWAP) anexam-se automaticamente a dados candlestick. Controles de streaming para Avalonia, Uno, MAUI, Blazor e ASP.NET Core. Mecanismo de diff SVG para otimização de largura de banda. Adaptador Rx IObservable<T>.
Projeções geográficas — pacote MatPlotLibNet.Geo com 5 projeções de mapa (PlateCarree, Mercator, Robinson, Orthographic, LambertConformal), parser GeoJSON, dados Natural Earth 110m embutidos e GeoPolygonSeries para costas/fronteiras/choropleth. Escala de eixo symlog para dados que abrangem faixas positivas e negativas.
SignalR bidirecional — gráficos interativos com autoridade no servidor, com eventos de mutação (zoom, pan, reset, alternância de legenda) e eventos de notificação (seleção por pincel, hover). Hierarquia de eventos com registros empilhados, coalescência natural, respostas de hover por chamador.
142 colormaps — viridis, plasma, turbo, coolwarm e mais 138 (71 mapas base, cada um com uma variante _r reversa registrada automaticamente). Numéricos SIMD estilo NumPy (Vec, Mat, Linalg, Fft). Acessibilidade (ARIA, teclado, paleta Okabe-Ito, tema de alto contraste). Temas que imitam o matplotlib. Integração com DataFrame com 53 indicadores técnicos. Eixos quebrados. Exportação de qualidade de publicação em SVG/PNG/PDF/GIF.
Licença
MIT — livre para qualquer uso, open-source ou comercial, sem condições de copyleft.