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、適合依賴注入、
伺服器端 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 軸標題、會換行並保持在磚塊內的磚塊標題,
以及一個刻度讀取為時間的營運視窗。
之後的節奏由社群驅動:錯誤修正、文件,以及實際使用中出現的任何需求。開啟一個 Discussion 或 Issue——這就是引導下一個版本的方向。每個版本 及其遷移說明都位於 CHANGELOG 中。
品質標準:嚴格的每類別覆蓋率門檻,行和分支覆蓋率 ≥90%(679 個類別,99.6% / 97.3%), 涵蓋 11,022 個測試,渲染結果並與 matplotlib 像素級精確的測試基準進行驗證。
文件
- Wiki — 入門指南、速查表、全部 83 種圖表類型、 控制室、樣式、串流、SignalR、套件
- Cookbook — 附渲染輸出的複製貼上範例
- Playground — 在瀏覽器中即時試用圖表
- API 參考 — 從 XML 文件產生
- Benchmarks · 覆蓋率政策 · 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 hub、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 hooks + 元件 + TypeScript SignalR 用戶端 |
| @matplotlibnet/vue | npm install @matplotlibnet/vue | Vue 3 composables + 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 種數列類型 — 折線、散點、長條、直方圖、圓餅、盒鬚、小提琴、熱圖、等高線、K 線、OHLC、樹狀圖、旭日圖、桑基圖、極座標、極座標熱圖、3D 曲面、Bar3D、PlanarBar3D、Line3D、Trisurf3D、Contour3D、Quiver3D、Voxels、Text3D、雷達圖、瀑布圖、漏斗圖、儀表圖、統計磚(單值 KPI)、狀態時間軸(隨時間的離散狀態區段)、配對網格、相對旋轉圖、串流折線/散點/訊號/K 線,以及更多。
MCP 伺服器 — 供 AI 代理程式使用的圖表 — MatPlotLibNet.Mcp 是一個
Model Context Protocol 伺服器,以 .NET 工具形式發布,主機透過 stdio 啟動。四個工具:render_chart(PNG 加上所繪製內容的文字摘要)、save_chart(PNG/SVG/PDF 寫入檔案,並回傳寫入的路徑)、list_chart_types 和
describe_chart_schema。規格是函式庫自己的 figure 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 種數列類型: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)會自動附加到 K 線資料。適用於 Avalonia、Uno、MAUI、Blazor 和 ASP.NET Core 的串流控制項。用於頻寬最佳化的 SVG diff 引擎。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 條件。