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 轴";
相关推荐
心念枕惊7 小时前
OpenClaw.NET 重大更新:Goal 机制登场,让 AI Agent 不再“半途而废“
.net
geovindu8 小时前
CSharp:Chain of Responsibility Pattern
开发语言·后端·设计模式·c#·.net·责任链模式·行为模式
颜x小10 小时前
[C#]泛型类与泛型方法
开发语言·c++·c#
caishenzhibiao10 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
TDengine (老段)11 小时前
TDengine Node.js 与 C# 连接器 — Web 服务与 .NET 集成
大数据·数据库·node.js·c#·.net·时序数据库·tdengine
河西石头12 小时前
再谈C#的抽象类和接口:从“适配器”到“毛坯房”的设计哲学
开发语言·c#·接口·依赖注入·抽象类·依赖倒挂
颜x小12 小时前
[C#]——接口与继承
开发语言·c++·c#
dalong1012 小时前
WPF:3D正四面体旋转改错
3d·wpf
颜x小1 天前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_423652131 天前
C#使用JObject
开发语言·c#