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 中
相关推荐
a_golden_fish几秒前
【做一道算一道】滑动窗口最大值
数据结构·算法
凢曐6 分钟前
水仙花数算法
算法
creative_mind12 分钟前
优选算法之技巧(一):双指针一:移位0与复写0
数据结构·算法·优选算法
sunflowers1135 分钟前
代码随想录算法训练营day74 | 94. 城市间货物运输 I、95. 城市间货物运输 II、96. 城市间货物运输 III
算法
拾漓1 小时前
算法整理——【贪心算法练习(1)】
算法·贪心算法
每天努力进步!1 小时前
LeetCode热题100刷题8:54. 螺旋矩阵、73. 矩阵置零、48. 旋转图像
c++·算法·leetcode·矩阵
观鉴词recommend1 小时前
【c++刷题笔记-贪心】day28: 134. 加油站 、 135. 分发糖果 、860.柠檬水找零 、 406.根据身高重建队列
c++·笔记·算法·leetcode
ToBeWhatYouWannaBe.2 小时前
代码随想录-Day49
java·数据结构·算法·leetcode
Little Tian2 小时前
插入排序——C语言
c语言·数据结构·算法·排序算法
creative_mind2 小时前
My Greedy Algorithm(贪心算法)之路(一)
c++·算法·贪心算法