WPF散点图学习

一、 初始化界面

cs 复制代码
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
  • 这行代码设置了渲染模式为软件渲染模式。在 WPF(Windows Presentation Foundation)中,渲染模式决定了图形和界面元素如何在屏幕上绘制和呈现。软件渲染模式通常用于在不支持硬件加速的环境中进行图形绘制,或者在需要更高兼容性和稳定性的场景下使用。
cs 复制代码
InitializeComponent();
  • 这是一个 WPF 中常见的语句,用于初始化当前窗体或用户控件的组件。它通常在窗体或用户控件的构造函数中调用,用来加载 XAML 中定义的界面元素和布局。
cs 复制代码
var dataSeries1 = new XyDataSeries<int, int>();

这段代码创建了一个 XyDataSeries 对象,该对象可以存储和管理 X 轴和 Y 轴均为整数类型的数据。这个对象可以用来添加、删除和操作图表中的数据点,从而在图表中展示这些数据

二、创建一系列近似于正弦的模拟数据

cs 复制代码
double dou = 0; // 定义一个双精度浮点数变量
int XAxisLen = 2047; // 设置了X轴的长度,也是数据的个数
Random random = new Random(); // 创建随机数生成器


for (int i = 0; i < XAxisLen; i++) // 循环生成模拟数据
{
    double noise = random.NextDouble() * 50 - 25; // 生成范围随机噪声
    int yValue = (int)(Math.Sin(dou) * 200 + noise + 400); // 设置峰值并加上偏移量
    dataSeries1.Append(i, yValue); // 向原始数据系列添加数据点
 
    dou += 0.003; // 增加之后周期变短
}
  • double dou = 0;

    • 定义一个名为 dou 的双精度浮点数变量,并初始化为 0。
    • 这个变量将在循环中用于计算正弦波的值。
  • int XAxisLen = 2047;

    • 定义一个名为 XAxisLen 的整数变量,并将其设置为 2047。
    • 这个变量表示 X 轴的长度,也是生成的数据点的个数。
  • Random random = new Random();

    • 创建一个 Random 类的实例 random,用于生成随机数。
    • Random 类提供生成伪随机数的功能。
  • for (int i = 0; i < XAxisLen; i++)

    • 使用 for 循环来生成模拟数据,循环次数为 XAxisLen(即 2047 次)。
    • i 是循环变量,从 0 开始,每次循环递增 1,直到小于 XAxisLen
  • double noise = random.NextDouble() * 50 - 25;

    • 生成一个范围在 [-25, 25) 之间的随机噪声。
    • random.NextDouble() 生成一个范围在 [0.0, 1.0) 的双精度浮点数,将其乘以 50 后减去 25,即得到范围为 [-25, 25) 的噪声值。
  • int yValue = (int)(Math.Sin(dou) * 200 + noise + 400);

    • 计算 y 轴的值 yValue
    • 使用 Math.Sin(dou) 计算 dou 的正弦值,并将其放大 200 倍,然后加上噪声和偏移量 400。
    • 将结果转换为整数类型。
  • dataSeries1.Append(i, yValue);

    • 将计算得到的 (i, yValue) 数据点添加到 dataSeries1 数据系列中。
    • i 作为 x 轴的值,yValue 作为 y 轴的值。
  • dou += 0.003;

    • 在每次循环后,将 dou 增加 0.003。
    • 这样可以在每次循环中逐渐增加正弦函数的输入值,生成连续的正弦波形数据。

三、散点图的创建

cs 复制代码
lineSeries1 = new XyScatterRenderableSeries // 创建一个散点图系列
{
    DataSeries = dataSeries1, // 设置数据系列
    PointMarker = new EllipsePointMarker { Width = 2, Height = 2, Fill = Colors.White }, // 设置点标记样式
    YAxisId = "LeftYAxis" // 设置 Y 轴 ID
};
  • lineSeries1 = new XyScatterRenderableSeries

    • 创建一个 XyScatterRenderableSeries 对象并将其赋值给 lineSeries1 变量。
    • XyScatterRenderableSeries 是用于绘制散点图的类。
  • DataSeries = dataSeries1,

    • 将之前创建并填充的数据系列 dataSeries1 赋值给 lineSeries1DataSeries 属性。
    • 这意味着 lineSeries1 将使用 dataSeries1 中的数据来绘制散点图。
  • PointMarker = new EllipsePointMarker { Width = 2, Height = 2, Fill = Colors.White },

    • 设置散点图中点的标记样式。
    • PointMarker 属性被赋值为一个新的 EllipsePointMarker 对象。
    • EllipsePointMarker 是一个椭圆形的点标记,其 WidthHeight 属性被设置为 2,表示点的大小为 2 像素。
    • Fill = Colors.White 设置点的填充颜色为白色。
  • YAxisId = "LeftYAxis"

    • 设置散点图系列使用的 Y 轴的 ID 为 "LeftYAxis"
    • 这意味着 lineSeries1 将使用 ID 为 "LeftYAxis" 的 Y 轴。

sciChart.RenderableSeries.Add(lineSeries1); //

  • 添加散点图系列到 SciChart 中
相关推荐
军训猫猫头34 分钟前
100.Complex[]同时储存实数和虚数两组double的数组 C#例子
算法·c#·信号处理
int型码农1 小时前
数据结构第八章(五)-外部排序和败者树
c语言·数据结构·算法·排序算法
好易学·数据结构1 小时前
可视化图解算法52:数据流中的中位数
数据结构·算法·leetcode·面试·力扣·笔试·牛客
dying_man2 小时前
LeetCode--35.搜索插入位置
算法·leetcode
点云SLAM3 小时前
PyTorch 中Tensor常用数据结构(int, list, numpy array等)互相转换和实战示例
数据结构·人工智能·pytorch·算法·list·numpy·tensor
Jo乔戈里5 小时前
计量经济学(复习/自用/未完)
算法
苦学LCP的小猪5 小时前
LeeCode94二叉树的中序遍历
数据结构·python·算法·leetcode
实习生小黄5 小时前
基于扫描算法获取psd图层轮廓
前端·javascript·算法
CYRUS_STUDIO5 小时前
破解 VMP+OLLVM 混淆:通过 Hook jstring 快速定位加密算法入口
android·算法·逆向