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。

CI NuGet NuGet Downloads License: MIT GitHub stars

未來方向

1.15 系列向代理程式敞開了大門:MatPlotLibNet.Mcp 是一個 Model Context Protocol 伺服器,因此 模型可以根據 JSON 規格渲染任何這些圖表類型並查看結果——而當規格不符時,它會被告知哪個欄位有誤。

之前的 1.14 系列是控制室的工作:Plt.OpsDashboard() 和磚塊結構隨之而來, 之後的版本是實際營運操作牆所要求的修正和擴充——一個完整公民的次要 Y 軸、 在 SVG 中繪製的串流、會自行清除標籤的 3D 軸標題、會換行並保持在磚塊內的磚塊標題, 以及一個刻度讀取為時間的營運視窗。

之後的節奏由社群驅動:錯誤修正、文件,以及實際使用中出現的任何需求。開啟一個 DiscussionIssue——這就是引導下一個版本的方向。每個版本 及其遷移說明都位於 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 hub、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 hooks + 元件 + TypeScript SignalR 用戶端
@matplotlibnet/vuenpm install @matplotlibnet/vueVue 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_typesdescribe_chart_schema。規格是函式庫自己的 figure 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 種數列類型: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 色條支援。

串流與即時StreamingLineSeriesStreamingScatterSeriesStreamingSignalSeriesStreamingCandlestickSeriesDoubleRingBuffer 搭配 AppendPoint(x, y) 支援。StreamingFigure 提供節流的重新渲染和自動縮放軸(SlidingWindowStickyRightAutoScale)。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 數值運算(VecMatLinalgFft)。無障礙性(ARIA、鍵盤、Okabe-Ito 調色盤、高對比主題)。Matplotlib 外觀主題。DataFrame 整合搭配 53 種技術指標。斷裂軸。出版品質的 SVG/PNG/PDF/GIF 匯出。


授權

MIT — 任何用途皆免費,無論是開源或商業用途,沒有 copyleft 條件。