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

一个受 matplotlib 启发的 .NET 10 / .NET 8 图表库:流畅的 API、对 DI 友好、 服务端 SVG / PNG / PDF / 动画 GIF 导出、一个 MCP 服务器让 AI 代理可以用它绘图,以及 83 种系列类型。内置 13 种地图投影和嵌入式 Natural Earth 数据、30 个主题、LaTeX 风格 MathText、O(1) 流式处理与 53 个技术指标、一个控制室 (Plt.OpsDashboard() — KPI 磁贴、状态时间线、一个共享趋势窗口),以及面向 Blazor、WPF、 MAUI、Avalonia、Uno 和 ASP.NET Core 的原生控件,外加面向 Angular、React 和 Vue 的 TypeScript 客户端。无 JavaScript 框架、 无 WebView、无 SaaS。

CI NuGet NuGet Downloads License: MIT GitHub stars

发展方向

1.15 系列向代理开放了库:MatPlotLibNet.Mcp 是一个 Model Context Protocol 服务器,因此 模型可以从 JSON 规范渲染任何这些图表类型并查看结果——当规范不符合时,它会被告知哪个字段出错。

之前的 1.14 系列是控制室工作:Plt.OpsDashboard() 和磁贴解剖随之而来, 之后的版本是实时操作员墙所要求的修复和扩展——一个完全公民身份的次 Y 轴、 在 SVG 中绘制的流式处理、能自行清除标签的 3D 轴标题、能换行并保持在磁贴内的磁贴标题, 以及刻度读作时间的操作窗口。

之后节奏由社区驱动:错误修复、文档,以及实际使用中出现的任何内容。打开一个 讨论问题——这就是引导下一个版本发布的方式。每个版本 及其迁移说明都在 CHANGELOG 中。

质量标准:严格的逐类覆盖率门槛 ≥90% 行和分支(679 个类,99.6% / 97.3%), 覆盖 11,022 个测试,渲染结果与 matplotlib 像素保真夹具进行验证。


文档


安装功能
MatPlotLibNetdotnet add package MatPlotLibNet核心:模型、流畅 API、SVG 渲染、JSON、变换
MatPlotLibNet.DataFramedotnet add package MatPlotLibNet.DataFrameMicrosoft.Data.Analysis.DataFrame 扩展方法——绘图、指标(SMA/EMA/RSI/MACD/…)以及基于命名列的多项式回归
MatPlotLibNet.Skiadotnet add package MatPlotLibNet.Skia通过 SkiaSharp 导出 PNG、PDF 和动画 GIF
MatPlotLibNet.Blazordotnet add package MatPlotLibNet.BlazorMplChart + MplLiveChart 带 SignalR 的 Razor 组件
MatPlotLibNet.AspNetCoredotnet add package MatPlotLibNet.AspNetCoreREST 端点、SignalR 中心、IChartPublisher
MatPlotLibNet.Interactivedotnet add package MatPlotLibNet.Interactivefigure.ShowAsync() — 浏览器弹窗,无需服务器
MatPlotLibNet.GraphQLdotnet add package MatPlotLibNet.GraphQL通过 HotChocolate 的 GraphQL 查询 + 订阅
MatPlotLibNet.Mauidotnet add package MatPlotLibNet.Maui通过 Microsoft.Maui.Graphics 的原生 MplChartView
MatPlotLibNet.Avaloniadotnet add package MatPlotLibNet.Avalonia面向 Avalonia 12 的原生 MplChartControl — Skia 后端,可选本地交互
MatPlotLibNet.Unodotnet add package MatPlotLibNet.Uno面向 Uno Platform 的原生 MplChartElement(WinUI 3 / Android / iOS / macCatalyst)
MatPlotLibNet.Wpfdotnet add package MatPlotLibNet.Wpf通过 SkiaSharp 的原生 WPF MplChartControl — 全部 9 种交互修饰键
MatPlotLibNet.Geodotnet add package MatPlotLibNet.Geo13 种地图投影、GeoJSON 解析器、Natural Earth 110m 数据、地理多边形
MatPlotLibNet.Notebooks#r "nuget: MatPlotLibNet.Notebooks"Polyglot / Jupyter 笔记本中的内联 SVG
MatPlotLibNet.Mcpdnx MatPlotLibNet.McpMCP 服务器 — AI 代理通过 stdio 渲染图表(cookbook
@matplotlibnet/angularnpm install @matplotlibnet/angularAngular 组件 + TypeScript SignalR 客户端
@matplotlibnet/reactnpm install @matplotlibnet/reactReact 钩子 + 组件 + TypeScript SignalR 客户端
@matplotlibnet/vuenpm install @matplotlibnet/vueVue 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、树状图、旭日图、桑基图、极坐标、极坐标热力图、3D 曲面、Bar3D、PlanarBar3D、Line3D、Trisurf3D、Contour3D、Quiver3D、体素、Text3D、雷达图、瀑布图、漏斗图、仪表、统计磁贴(单值 KPI)、状态时间线(随时间变化的离散状态段)、配对网格、相对旋转图、流式折线/散点/信号/蜡烛图等。

MCP 服务器 — 面向 AI 代理的图表MatPlotLibNet.Mcp 是一个 Model Context Protocol 服务器,作为 .NET 工具由宿主通过 stdio 启动。四个工具:render_chart(PNG 加上所绘制内容的文本摘要)、save_chart(PNG/SVG/PDF 写入文件,返回写入的路径)、list_chart_typesdescribe_chart_schema。规范是库自身的图形 JSON,因此库能绘制的任何内容,代理都可以 请求——并且服务器在渲染前按字段名拒绝错误的规范,而不是返回空白 图片。参见 cookbook

{ "servers": { "MatPlotLibNet.Mcp": { "type": "stdio", "command": "dnx", "args": ["MatPlotLibNet.Mcp", "--yes"] } } }

控制室Plt.OpsDashboard() 组合一个操作员屏幕:顶部 KPI 磁贴、其下状态时间线、以及一个共享趋势面板,全部固定到调用方提供的时间窗口(库从不读取墙钟)。磁贴带有 Target、可换行的多行 Caption、内联迷你走势图和一个表示无信息HatchTheme.Alarm 命名保留的警报颜色,并附带四种操作员背景。BulletGraphSeries 取代径向仪表。

原生 UI 控件 — 面向 Avalonia 12 的 MplChartControl 和面向 Uno Platform 的 MplChartElement 通过 SkiaSharp 原生渲染图表——无需浏览器、无需 WebView、无需 SignalR。9 种交互修饰键:平移(拖拽)、缩放(滚轮)、3D 旋转(右键拖拽)、矩形缩放(Ctrl+拖拽)、刷选(Shift+拖拽)、跨度选择(Alt+拖拽)、图例切换(点击)、十字准线(被动)、悬停提示。工具栏状态模型、视图历史(后退/前进)、数据光标(点击固定)、刻度镜像、紧凑边距。

MathText — 任何标签或标题中的 LaTeX 风格内联数学:$\alpha^{2}$$\frac{a}{b}$$\sqrt{x}$$\hat{x}$$\mathbf{F}$$\mathbb{R}$。96 种符号映射(希腊字母、数学运算符、箭头、关系、集合/逻辑、黑板粗体)、分数、平方根、重音、字体变体、间距和缩放分隔符。

3D 图表 — 12 种系列类型:曲面、Scatter3D、Bar3D、PlanarBar3D、Line3D、Trisurf3D(Delaunay)、Contour3D(行进方块)、Quiver3D(向量场)、体素(面剔除立方体)、Text3D(注释)。完整 Projection3D 管线、DepthQueue3D 画家算法、Vec3.FaceNormal + Color.Shade()/Color.Modulate() 基于扩展的着色、Svg3DRotationScript 客户端旋转与深度重排序、相机派生的背面(CubeFaceSelection — 面板、立方体边缘、墙网格和刻度行在任何方位角跟随相机,服务端和拖拽期间均可)、可配置 Pane3DConfig(地板/墙壁颜色)以及 3D 颜色条支持。

流式与实时StreamingLineSeriesStreamingScatterSeriesStreamingSignalSeriesStreamingCandlestickSeriesDoubleRingBuffer 支持,带 AppendPoint(x, y)StreamingFigure 提供节流重渲染和自动缩放轴(SlidingWindowStickyRightAutoScale)。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。Symlog 轴刻度用于跨越正负范围的数据。

双向 SignalR — 服务器权威的交互式图表,带变更事件(缩放、平移、重置、图例切换)和通知事件(刷选、悬停)。堆叠记录事件层次、自然合并、按调用方悬停响应。

142 种颜色映射 — viridis、plasma、turbo、coolwarm 以及另外 138 种(71 种基础映射,每种带自动注册的反向 _r 变体)。NumPy 风格 SIMD 数值计算(VecMatLinalgFft)。无障碍(ARIA、键盘、Okabe-Ito 调色板、高对比度主题)。Matplotlib 外观主题。DataFrame 集成,含 53 个技术指标。断裂轴。出版级 SVG/PNG/PDF/GIF 导出。


许可证

MIT — 任何用途免费,开源或商业均可,无 copyleft 条件。