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 中
相关推荐
Voyager_427 分钟前
图像处理踩坑:浮点数误差导致的缩放尺寸异常与解决办法
数据结构·图像处理·人工智能·python·算法
文艺倾年33 分钟前
【八股消消乐】手撕分布式协议和算法(基础篇)
分布式·算法
万岳科技系统开发1 小时前
从源码优化外卖配送系统:算法调度、智能推荐与数据分析应用
算法·数据挖掘·数据分析
信奥卷王4 小时前
[GESP202503 五级] 原根判断
java·数据结构·算法
兮山与4 小时前
算法4.0
算法
nju_spy4 小时前
力扣每日一题(二)任务安排问题 + 区间变换问题 + 排列组合数学推式子
算法·leetcode·二分查找·贪心·排列组合·容斥原理·最大堆
初听于你4 小时前
高频面试题解析:算法到数据库全攻略
数据库·算法
翟天保Steven4 小时前
ITK-基于Mattes互信息的二维多模态配准算法
算法
代码对我眨眼睛4 小时前
226. 翻转二叉树 LeetCode 热题 HOT 100
算法·leetcode·职场和发展
黑色的山岗在沉睡5 小时前
LeetCode 494. 目标和
算法·leetcode·职场和发展