MatPlotLibNet
официальныйПередайте ему JSON для графика, и он отрендерит PNG, который модель действительно сможет просмотреть — 83 типа графиков, SVG и PDF записываются в файл, работает локально как инструмент .NET.
Что можно делать с MatPlotLibNet MCP?
- Рендеринг диаграмм из JSON-спецификаций — Запросите диаграмму через
render_chartи получите PNG плюс текстовое резюме того, что было нарисовано. - Сохранение диаграмм в файлы — Используйте
save_chartдля экспорта диаграммы в PNG, SVG или PDF и получите путь к записанному файлу. - Изучение возможностей диаграмм — Запросите
list_chart_types, чтобы увидеть все 83 поддерживаемых типа серий, от линейных графиков до 3D-поверхностей. - Проверка схем диаграмм — Получите ошибки на уровне полей от
describe_chart_schema, когда спецификация диаграммы некорректна.
Документация
MatPlotLibNet
Библиотека для построения графиков на .NET 10 / .NET 8, вдохновлённая matplotlib: гибкий API, дружелюбная к DI,
серверный экспорт в SVG / PNG / PDF / анимированный GIF, MCP-сервер, позволяющий ИИ-агенту рисовать с её помощью, и 83 типа серий. Поставляется с 13 картографическими проекциями и встроенными
данными Natural Earth, 30 темами, MathText в стиле LaTeX, потоковой передачей O(1) с 53 техническими индикаторами, контрольной панелью
(Plt.OpsDashboard() — плитки KPI, временные шкалы состояний, одно общее окно трендов), а также нативными элементами управления для Blazor, WPF,
MAUI, Avalonia, Uno и ASP.NET Core, плюс TypeScript-клиенты для Angular, React и Vue. Никакого JavaScript-фреймворка,
никакого WebView, никакого SaaS.
Куда это движется
Линейка 1.15 открывает библиотеку для агентов: MatPlotLibNet.Mcp — это сервер Model Context Protocol, поэтому
модель может отрисовать любой из этих типов графиков из JSON-спецификации и посмотреть на результат — и ей сообщается, какое поле
неверно, если спецификация не соответствует.
Предшествующая линейка 1.14 была посвящена контрольной панели: вместе с ней появились Plt.OpsDashboard() и анатомия плиток,
а последующие релизы — это исправления и расширения, которые запросила живая операторская стена: вторичная ось Y, являющаяся
полноправным гражданином, потоковая отрисовка в SVG, трёхмерные заголовки осей, очищающие собственные подписи, подписи плиток, которые
переносятся и остаются внутри своей плитки, и окно операций, чьи деления читаются как время.
После этого ритм задаётся сообществом: исправления ошибок, документация и всё, что выявит реальное использование. Откройте обсуждение или issue — именно это направляет следующий релиз. Каждый релиз с примечаниями по миграции находится в CHANGELOG.
Планка качества: строгий порог покрытия на уровне класса ≥90 % по строкам и ветвям (679 классов, 99,6 % / 97,3 %) в 11 022 тестах, с проверкой рендеринга по эталонным изображениям пиксельной точности matplotlib.
Документация
- Wiki — начало работы, шпаргалка, все 83 типа графиков, контрольная панель, стилизация, потоковая передача, SignalR, пакеты
- Cookbook — примеры копирования и вставки с отрисованным результатом
- Playground — попробуйте графики вживую в браузере
- Справочник API — сгенерирован из XML-документации
- Бенчмарки · Политика покрытия · CHANGELOG
Пакеты
| Пакет | Установка | Что делает |
|---|---|---|
| MatPlotLibNet | dotnet add package MatPlotLibNet | Ядро: модели, гибкий API, рендеринг SVG, JSON, преобразования |
| MatPlotLibNet.DataFrame | dotnet add package MatPlotLibNet.DataFrame | Методы расширения Microsoft.Data.Analysis.DataFrame — графики, индикаторы (SMA/EMA/RSI/MACD/…) и полиномиальная регрессия по именованным столбцам |
| MatPlotLibNet.Skia | dotnet add package MatPlotLibNet.Skia | Экспорт в PNG, PDF и анимированный GIF через SkiaSharp |
| MatPlotLibNet.Blazor | dotnet add package MatPlotLibNet.Blazor | Компоненты Razor MplChart + MplLiveChart с SignalR |
| MatPlotLibNet.AspNetCore | dotnet add package MatPlotLibNet.AspNetCore | REST-конечные точки, хаб SignalR, IChartPublisher |
| MatPlotLibNet.Interactive | dotnet add package MatPlotLibNet.Interactive | figure.ShowAsync() — всплывающее окно браузера, сервер не нужен |
| MatPlotLibNet.GraphQL | dotnet add package MatPlotLibNet.GraphQL | GraphQL-запросы и подписки через HotChocolate |
| MatPlotLibNet.Maui | dotnet add package MatPlotLibNet.Maui | Нативный MplChartView через Microsoft.Maui.Graphics |
| MatPlotLibNet.Avalonia | dotnet add package MatPlotLibNet.Avalonia | Нативный MplChartControl для Avalonia 12 — бэкенд Skia, опциональное локальное взаимодействие |
| MatPlotLibNet.Uno | dotnet add package MatPlotLibNet.Uno | Нативный MplChartElement для Uno Platform (WinUI 3 / Android / iOS / macCatalyst) |
| MatPlotLibNet.Wpf | dotnet add package MatPlotLibNet.Wpf | Нативный WPF MplChartControl через SkiaSharp — все 9 модификаторов взаимодействия |
| MatPlotLibNet.Geo | dotnet add package MatPlotLibNet.Geo | 13 картографических проекций, парсер GeoJSON, встроенные данные Natural Earth 110m, географические полигоны |
| MatPlotLibNet.Notebooks | #r "nuget: MatPlotLibNet.Notebooks" | Встроенный SVG в блокнотах Polyglot / Jupyter |
| MatPlotLibNet.Mcp | dnx MatPlotLibNet.Mcp | MCP-сервер — ИИ-агент отрисовывает графики через stdio (cookbook) |
| @matplotlibnet/angular | npm install @matplotlibnet/angular | Компоненты Angular + TypeScript-клиент SignalR |
| @matplotlibnet/react | npm install @matplotlibnet/react | Хуки и компоненты React + TypeScript-клиент SignalR |
| @matplotlibnet/vue | npm install @matplotlibnet/vue | Композаблы Vue 3 + TypeScript-клиент SignalR |
Быстрый старт
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");
Возможности
83 типа серий — линейный, точечный, столбчатый, гистограмма, круговая, ящик с усами, скрипичный, тепловая карта, контурный, свечной, OHLC, treemap, sunburst, Sankey, полярный, полярная тепловая карта, 3D-поверхность, Bar3D, PlanarBar3D, Line3D, Trisurf3D, Contour3D, Quiver3D, Voxels, Text3D, радар, водопад, воронка, датчик, плитка состояния (однозначный KPI), временная шкала состояний (дискретные сегменты состояний во времени), сетка пар, граф относительного вращения, потоковые линейный/точечный/сигнальный/свечной и другие.
MCP-сервер — графики для ИИ-агента — MatPlotLibNet.Mcp — это
сервер Model Context Protocol, поставляемый как инструмент .NET, который хост запускает через stdio. Четыре инструмента: render_chart (PNG плюс текстовое резюме
того, что было нарисовано), save_chart (PNG/SVG/PDF в файл с возвратом записанного пути), list_chart_types и
describe_chart_schema. Спецификация — это собственный JSON фигуры библиотеки, поэтому всё, что библиотека рисует, агент может
запросить — и сервер отклоняет неверную спецификацию по имени поля до рендеринга, вместо того чтобы возвращать пустую
картинку. См. cookbook.
{ "servers": { "MatPlotLibNet.Mcp": { "type": "stdio", "command": "dnx", "args": ["MatPlotLibNet.Mcp", "--yes"] } } }
Контрольная панель — Plt.OpsDashboard() собирает один операторский экран: плитки KPI сверху, временные шкалы состояний под ними и общую панель трендов, все привязанные к одному окну времени, заданному вызывающей стороной (библиотека никогда не читает настенные часы). Плитка несёт Target, переносящуюся многострочную Caption, встроенный спарклайн и Hatch, означающий нет информации; Theme.Alarm называет зарезервированные цвета тревог, и с ней поставляются четыре фона оператора. BulletGraphSeries заменяет радиальный датчик.
Нативные элементы управления UI — MplChartControl для Avalonia 12 и MplChartElement для Uno Platform отрисовывают графики нативно через SkiaSharp — без браузера, WebView и SignalR. 9 модификаторов взаимодействия: панорамирование (перетаскивание), масштабирование (колесо), 3D-вращение (перетаскивание правой кнопкой), прямоугольное масштабирование (Ctrl+перетаскивание), выделение кистью (Shift+перетаскивание), выделение диапазона (Alt+перетаскивание), переключение легенды (клик), перекрестие (пассивное), всплывающая подсказка. Модель состояний панели инструментов, история видов (назад/вперёд), курсор данных (клик для закрепления), зеркалирование делений, плотные поля.
MathText — встроенная математика в стиле LaTeX в любой подписи или заголовке: $\alpha^{2}$, $\frac{a}{b}$, $\sqrt{x}$, $\hat{x}$, $\mathbf{F}$, $\mathbb{R}$. 96 сопоставлений символов (греческий, математические операторы, стрелки, отношения, множества/логика,黑板bold), дроби, квадратные корни, акценты, варианты шрифтов, интервалы и масштабируемые разделители.
3D-графики — 12 типов серий: Surface, Scatter3D, Bar3D, PlanarBar3D, Line3D, Trisurf3D (Delaunay), Contour3D (marching squares), Quiver3D (векторное поле), Voxels (кубы с отсечением граней), Text3D (аннотации). Полный конвейер Projection3D, алгоритм художника DepthQueue3D, затенение на основе расширений Vec3.FaceNormal + Color.Shade()/Color.Modulate(), клиентское вращение Svg3DRotationScript с повторной сортировкой по глубине, задние грани, определяемые камерой (CubeFaceSelection — панели, рёбра куба, сетки стен и деления осей следуют за камерой под любым азимутом, на сервере и во время перетаскивания), настраиваемый Pane3DConfig (цвета пола/стен) и поддержка 3D-цветовой шкалы.
Потоковая передача и реальное время — StreamingLineSeries, StreamingScatterSeries, StreamingSignalSeries, StreamingCandlestickSeries на основе DoubleRingBuffer с AppendPoint(x, y). StreamingFigure обеспечивает регулируемый повторный рендеринг и автоматическое масштабирование осей (SlidingWindow, StickyRight, AutoScale). 11 потоковых индикаторов (SMA, EMA, RSI, Bollinger, MACD, OBV, ATR, Stochastic, WilliamsR, CCI, VWAP) автоматически подключаются к свечным данным. Элементы управления потоковой передачей для Avalonia, Uno, MAUI, Blazor и ASP.NET Core. Движок сравнения SVG для оптимизации пропускной способности. Адаптер Rx IObservable<T>.
Географические проекции — пакет MatPlotLibNet.Geo с 5 картографическими проекциями (PlateCarree, Mercator, Robinson, Orthographic, LambertConformal), парсер GeoJSON, встроенные данные Natural Earth 110m и GeoPolygonSeries для береговых линий/границ/хороплетов. Логарифмическая шкала осей для данных, охватывающих положительные и отрицательные диапазоны.
Двунаправленный SignalR — интерактивные графики с авторитетом на сервере, с событиями мутаций (масштабирование, панорамирование, сброс, переключение легенды) и событиями уведомлений (выделение кистью, наведение). Иерархия событий со стековой записью, естественная коалесценция, ответы на наведение для каждого вызывающего.
142 цветовые карты — viridis, plasma, turbo, coolwarm и ещё 138 (71 базовая карта, каждая с автоматически зарегистрированным обратным вариантом _r). Численные вычисления в стиле NumPy с SIMD (Vec, Mat, Linalg, Fft). Доступность (ARIA, клавиатура, палитра Okabe-Ito, высококонтрастная тема). Темы, похожие на matplotlib. Интеграция с DataFrame и 53 техническими индикаторами. Разорванные оси. Экспорт в SVG/PNG/PDF/GIF публикационного качества.
Лицензия
MIT — бесплатно для любого использования, открытого или коммерческого, без условий копилефта.