ScottPlot 从零上手:.NET 数据可视化 10 分钟出第一张图
2026/8/25 1:13:05 网站建设 项目流程

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
  • 渲染走 SkiaSharp,Windows/macOS 开箱即用,Linux 可能需要补字体库

装完直接出图

命令行安装

在装好的项目目录里执行下面一条命令,NuGet 会解析出 SkiaSharp 等依赖并写入 csproj;Package 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.Pie
UI 框架控件
WinFormsFormsPlotScottPlot.WinForms
WPFWpfPlotScottPlot.WPF
AvaloniaAvaPlotScottPlot.Avalonia
BlazorBlazorPlotScottPlot.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.WPF,XAML 里要声明 wpf 命名空间,C# 代码改图后调 Refresh() 重绘。

xmlns:wpf="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF" <wpf:WpfPlot Name="WpfPlot1" />
WpfPlot1.Plot.Add.Scatter(xs, ys); WpfPlot1.Refresh();

Blazor 初始化差异

控件包是 ScottPlot.Blazor,razor 里放 BlazorPlot,通过 @ref 取到组件后在生命周期方法里加数据;它和 WPF 的关键差别是多一次组件引用和一次显式 Refresh。

<BlazorPlot @ref="Plot" /> @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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询