ScottPlot在WPF的基本使用和中文乱码问题

ScottPlot

在 WPF 中使用ScottPlot (目前主流版本为ScottPlot 5)非常简便,它是一个高性能、开源的 .NET 绘图库,特别适合科学计算、工程数据显示和实时波形监控。

以下是完整的集成和使用指南:

1. 安装 NuGet 包

首先,你需要在 WPF 项目中安装专用的 WPF 包。

  • 包名 :ScottPlot.WPF
  • 操作方法 :
    • Visual Studio : 右键项目 -> "管理 NuGet 程序包" -> 搜索ScottPlot.WPF -> 安装。

    • 命令行 :

      bash 复制代码
      dotnet add package ScottPlot.WPF

注意 : 不要只安装ScottPlot核心库,WPF 项目必须安装ScottPlot.WPF 才能使用专用的控件。


2. 在 XAML 中添加控件

安装完成后,你可以在 XAML 文件中直接使用该控件。

步骤:

  1. 在根元素(如<Window><UserControl>)中添加命名空间声明:

    xml 复制代码
    xmlns:sp="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF"
  2. 在布局容器中添加WpfPlot 控件:

xml 复制代码
<Window x:Class="MyWpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sp="clr-namespace:ScottPlot.WPF;assembly=ScottPlot.WPF"
        Title="ScottPlot WPF Demo" Height="450" Width="800">
    
    <Grid>
        <!-- 使用 WpfPlot 控件 -->
        <sp:WpfPlot Name="MyPlot" />
    </Grid>
</Window>

启动效果:已经有图表了


3. 在C#代码添加数据绘制图表

ScottPlot 5 的核心逻辑是通过Plot对象进行的。在 WPF 中,你可以通过WpfPlot.Plot 属性访问它。

基本示例 (绘制折线图):

csharp 复制代码
using System.Windows;
using ScottPlot; // 引入核心命名空间
namespace MyWpfApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            InitializePlot();
        }
        private void InitializePlot()
        {
            // 1. 获取 Plot 对象
            var plot = MyPlot.Plot;
            // 2. 准备数据
            double[] xs = { 1, 2, 3, 4, 5 };
            double[] ys = { 1, 4, 9, 16, 25 };
            // 3. 添加图形 (Add 系列方法)
            var line = plot.Add.Line(xs, ys);
            //加一段
            // var line = plot.Add.Line(1, 1, 2, 4);
            //批量加点
            var line = plot.Add.ScatterLine(xs, ys);
            line.LineWidth = 2;
            line.Color = Colors.Blue; // 可以使用 System.Windows.Media.Color 或 ScottPlot 颜色
            // 4. 设置标题和标签
            plot.Title("我的第一个 ScottPlot 图表");
            plot.Axes.Bottom.Label.Text = "X 轴";
            plot.Axes.Left.Label.Text = "Y 轴";
            plot.Font.Automatic();
            // 5. 刷新显示 (非常重要!)
            MyPlot.Refresh(); 
        }
    }
}

4.图例位置设置

设置曲线的图例文本,然后设置图表的图例Legend属性

csharp 复制代码
//设置图例
line.LegendText = "压力";

// 将图例设置在右上角
plot.Legend.Location = Alignment.UpperRight;
plot.Legend.IsVisible = true;
csharp 复制代码
       // 1. 获取 Plot 对象
       var plot = MyPlot.Plot;
       // 2. 准备数据
       double[] xs = { 1, 2, 3, 4, 5 };
       double[] ys = { 1, 4, 9, 16, 25 };
       // 3. 添加图形 (Add 系列方法)
       //加一段
       // var line = plot.Add.Line(1, 1, 2, 4);

       var line = plot.Add.ScatterLine(xs, ys);
       line.LineWidth = 2;
       line.Color = ScottPlot.Colors.Blue; // 可以使用 System.Windows.Media.Color 或 ScottPlot 颜色
       line.LegendText = "压力";
       // 4. 设置标题和标签
       plot.Title("我的第一个 ScottPlot 图表");
       plot.Axes.Bottom.Label.Text = "X 轴";
       plot.Font.Automatic();
       plot.Axes.Left.Label.Text = "Y 轴";
       // 将图例设置在右上角
       plot.Legend.Alignment = Alignment.UpperRight;
       plot.Legend.IsVisible = true;
       // 5. 刷新显示 (非常重要!)
       MyPlot.Refresh();
   }

常见问题

中文乱码

默认字体可能不支持中文,导致方框乱码。你需要修改让其支持中文。

只需要使用Font.Automatic()

csharp 复制代码
plot.Title("我的第一个 ScottPlot 图表");
plot.Axes.Bottom.Label.Text = "X 轴";
plot.Axes.Left.Label.Text = "Y 轴";
plot.Font.Automatic();

📌需要注意的是,必须在设置完中文Text之后再调用才能生效

如下代码,显示效果就是Y轴中文没有生效

csharp 复制代码
     // 4. 设置标题和标签
     plot.Title("我的第一个 ScottPlot 图表");
     plot.Axes.Bottom.Label.Text = "X 轴";
     plot.Font.Automatic();
     plot.Axes.Left.Label.Text = "Y 轴";
相关推荐
码士集团小青1 小时前
C# 手写向量化能追上 C 吗?
c#
c#上位机4 小时前
tuple_max求数组中的最大值
c#·halcon·机器视觉
xintaiideas8 小时前
.NET 项目的多方式启动指南 [特殊字符]
c#
Z5998178419 小时前
c#软件开发学习笔记--WPF(MVVM框架)
笔记·学习·c#
软件黑马王子11 小时前
19.资源加载模块:主要作用和基本原理
开发语言·前端框架·c#
Am-Chestnuts12 小时前
通义千问任务清单怎么导出Word?用DS随心转保留层级和勾选项
开发语言·c#·word
fujisheng66113 小时前
拆解 FUI Source Generator:从 Bind 声明到强类型绑定与路由
c#
古少侠13 小时前
DeepSeek长回答怎么保存成Word?避免逐段复制和漏内容
c#·word
玖玥拾13 小时前
Lua 基础语法(五)Unity xLua基础配置与 C# 访问 Lua
开发语言·unity·c#·lua
我是唐青枫13 小时前
C#.NET StructureMap 从依赖注入到项目实战
开发语言·c#·.net