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。
发展方向
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 像素保真夹具进行验证。
文档
- 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 | 通过 SkiaSharp 导出 PNG、PDF 和动画 GIF |
| MatPlotLibNet.Blazor | dotnet add package MatPlotLibNet.Blazor | MplChart + MplLiveChart 带 SignalR 的 Razor 组件 |
| 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 | 通过 HotChocolate 的 GraphQL 查询 + 订阅 |
| MatPlotLibNet.Maui | dotnet add package MatPlotLibNet.Maui | 通过 Microsoft.Maui.Graphics 的原生 MplChartView |
| MatPlotLibNet.Avalonia | dotnet add package MatPlotLibNet.Avalonia | 面向 Avalonia 12 的原生 MplChartControl — Skia 后端,可选本地交互 |
| MatPlotLibNet.Uno | dotnet add package MatPlotLibNet.Uno | 面向 Uno Platform 的原生 MplChartElement(WinUI 3 / Android / iOS / macCatalyst) |
| MatPlotLibNet.Wpf | dotnet add package MatPlotLibNet.Wpf | 通过 SkiaSharp 的原生 WPF MplChartControl — 全部 9 种交互修饰键 |
| MatPlotLibNet.Geo | dotnet add package MatPlotLibNet.Geo | 13 种地图投影、GeoJSON 解析器、Natural Earth 110m 数据、地理多边形 |
| MatPlotLibNet.Notebooks | #r "nuget: MatPlotLibNet.Notebooks" | Polyglot / Jupyter 笔记本中的内联 SVG |
| MatPlotLibNet.Mcp | dnx MatPlotLibNet.Mcp | MCP 服务器 — AI 代理通过 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、树状图、旭日图、桑基图、极坐标、极坐标热力图、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_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 控件 — 面向 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 颜色条支持。
流式与实时 — 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。Symlog 轴刻度用于跨越正负范围的数据。
双向 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 — 任何用途免费,开源或商业均可,无 copyleft 条件。