ScottPlot 从零上手:.NET 数据可视化 10 分钟出第一张图

📅 2026/8/25 1:13:08
ScottPlot 从零上手:.NET 数据可视化 10 分钟出第一张图
ScottPlot 从零上手.NET 数据可视化 10 分钟出第一张图【免费下载链接】ScottPlotInteractive plotting library for .NET项目地址: https://gitcode.com/gh_mirrors/sc/ScottPlot手边有一份 200 行的销售 CSV下午要交一张趋势图。想在 .NET 里做数据可视化又不想为此临时啃一套绘图 API——ScottPlot 从装包到出图10 分钟能走完。它是什么ScottPlot 是一个 MIT 协议的 .NET 开源绘图库核心包只负责把数据画成位图再往上提供 WinForms、WPF、Avalonia、Blazor 等 UI 控件包负责把图嵌进窗口并支持缩放平移。它适合要几行代码出一张图的开发者。和 LiveCharts、OxyPlot 这类库的分水岭在于底层用 SkiaSharp 自绘不依赖宿主框架的绘图原语所以同一个Plot对象既能存 PNG也能塞进任何支持 SkiaSharp 的界面。装之前确认这几项.NET SDK 8 或更高版本先dotnet --list-sdks确认核心库同时支持 .NET Framework 4.6.2 与 .NET Standard 2.0你的项目是普通类库/控制台还是 UI 项目——决定装核心包还是连带控件包NuGet 源默认指向 nuget.org公司内网换源后也能搜到 ScottPlot若要改源码仓库为 https://gitcode.com/gh_mirrors/sc/ScottPlot 本地编译 src/ScottPlot5/ScottPlot5.sln渲染走 SkiaSharpWindows/macOS 开箱即用Linux 可能需要补字体库装完直接出图命令行安装在装好的项目目录里执行下面一条命令NuGet 会解析出 SkiaSharp 等依赖并写入 csprojPackage Manager Console 里的备选是Install-Package ScottPlot。dotnet add package ScottPlot最小出图示例下面这段代码创建 600x400 的图画一条二次曲线存成 PNG运行后工作目录会出现 quickstart.png打开确认坐标轴、网格、图线都正常即算跑通。var plt new ScottPlot.Plot(600, 400); double[] xs { 1, 2, 3, 4, 5 }; double[] ys { 1, 4, 9, 16, 25 }; plt.Add.Scatter(xs, ys); plt.SaveFig(quickstart.png);能画什么、能跑在哪图表类型API折线Add.Signal散点Add.Scatter柱状Add.BarPlot箱线Add.BoxPlot蜡烛Add.OHLC热图Add.Heatmap直方图Add.Histogram饼图Add.PieUI 框架控件包WinFormsFormsPlotScottPlot.WinFormsWPFWpfPlotScottPlot.WPFAvaloniaAvaPlotScottPlot.AvaloniaBlazorBlazorPlotScottPlot.Blazor操作系统覆盖 Windows、macOS、Linux不嵌界面的场景直接用核心包存图即可。按框架初始化WinForms 初始化差异控件包是 ScottPlot.WinForms把 FormsPlot 加到窗体并 Dock 为 Fill之后通过 Plot 属性画图每次改动后调 Refresh()。var fp new ScottPlot.WinForms.FormsPlot { Dock DockStyle.Fill }; fp.Plot.Add.Scatter(xs, ys); fp.Refresh();WPF 初始化差异控件包是 ScottPlot.WPFXAML 里要声明 wpf 命名空间C# 代码改图后调 Refresh() 重绘。xmlns:wpfclr-namespace:ScottPlot.WPF;assemblyScottPlot.WPF wpf:WpfPlot NameWpfPlot1 /WpfPlot1.Plot.Add.Scatter(xs, ys); WpfPlot1.Refresh();Blazor 初始化差异控件包是 ScottPlot.Blazorrazor 里放 BlazorPlot通过 ref 取到组件后在生命周期方法里加数据它和 WPF 的关键差别是多一次组件引用和一次显式 Refresh。BlazorPlot refPlot / code { ScottPlot.Blazor.BlazorPlot Plot; protected override void OnInitialized() Plot.Plot.Add.Scatter(xs, ys); }高频坑与解法现象编译报 SkiaSharp 程序集版本冲突或 TypeLoadException。根因工程里其他包引用了不同版本的 SkiaSharp运行时加载了错的那份。一行修复用包管理器把 ScottPlot 与 ScottPlot.* 全部统一升到 5.1.x让 NuGet 一并协调 SkiaSharp 版本。现象Linux 上窗体能打开但图区空白。根因缺少 libfontconfig 等 SkiaSharp 运行库。一行修复sudo apt install libfontconfig1 fontconfig重开应用即恢复。现象百万点散点拖拽缩放明显卡顿。根因Scatter 每帧对全部点逐点连线Signal 数据源有分段 min/max 缓存同规模下开销低得多。一行修复把Add.Scatter(xs, ys)换成Add.Signal(ys)交互立刻恢复流畅。现象标题里中文或希腊字母渲染成方块。根因系统没有对应字形SkiaSharp 找不到 CJK 字体。一行修复Linux 上先装fonts-noto-cjk再在代码里把plt.Fonts.Default指定为系统中真实存在的中文字体名。延伸阅读官方文档站 scottplot.net查 API 语义、交互行为和跨框架差异以在线文档为准Cookbook 示例仓库内src/ScottPlot5/ScottPlot5 Cookbook/Recipes/按图表类型组织的可运行代码照着抄最快演示项目src/ScottPlot5/ScottPlot5 Demos/各框架下的完整交互窗口确认控件行为时可对照核心库源码src/ScottPlot5/ScottPlot5/Plottables/每个 Plottable 一个文件需要改渲染逻辑时从这里下手【免费下载链接】ScottPlotInteractive plotting library for .NET项目地址: https://gitcode.com/gh_mirrors/sc/ScottPlot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考