服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 绘制实时折线图,波形图

C# 绘制实时折线图,波形图

2022-09-23 15:37Alan.hsiang C#

这篇文章主要介绍了C# 绘制实时折线图,波形图的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

此Demo是采用VS自带的Chart图表控件,制作实时动态显示的折线图,和波形图。本文仅供学习分享使用,如有不足之处,还请指正。

涉及知识点:

Chart 控件,功能强大,可以绘制柱状图,折线图,波形图,饼状图,大大简化了对图的开发与定制。

    Chart控件的相关概念:

  • ChartArea,表示图表区域,一个Chart可以绘制多个ChartArea,重叠在一起。
  • Series ,表示数据序列,每个ChartArea可以有多个数据线。即,Series属于ChartArea.
  • AxisX,AxisY,表示主坐标轴,每一个ChartArea都有对应的坐标轴,包括主坐标轴,辅坐标轴

Queue集合,表示先进先出的集合。

    主要有两个方法:

  • Dequeue() 表示移除并返回位于 System.Collections.Generic.Queue<T> 开始处的对象。
  • Enqueue() 表示将对象添加到 System.Collections.Generic.Queue<T> 的结尾处。

Timer ,定时器,定时之行相应的功能,更新数据,刷新图表。
-----------------------------------------------------------------------------------------------------------

效果图

如下【先点击初始化按钮,再点击开始按钮】:

折线图【折线图,是取[0,100]之间的随即数进行填充】:

C# 绘制实时折线图,波形图

波形图【波形图,是取正玄值,并放大50倍,然后上移50】

C# 绘制实时折线图,波形图

核心代码

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
 
namespace WindowsFormsApplication1
{
 public partial class RealChart : Form
 {
  private Queue<double> dataQueue = new Queue<double>(100);
 
  private int curValue = 0;
 
  private int num = 5;//每次删除增加几个点
 
  public RealChart()
  {
   InitializeComponent();
  }
 
  /// <summary>
  /// 初始化事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnInit_Click(object sender, EventArgs e)
  {
   InitChart();
  }
 
  /// <summary>
  /// 开始事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnStart_Click(object sender, EventArgs e)
  {
   this.timer1.Start();
  }
 
  /// <summary>
  /// 停止事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnStop_Click(object sender, EventArgs e)
  {
   this.timer1.Stop();
  }
 
  /// <summary>
  /// 定时器事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void timer1_Tick(object sender, EventArgs e)
  {
   UpdateQueueValue();
   this.chart1.Series[0].Points.Clear();
   for(int i=0;i<dataQueue.Count;i++){
    this.chart1.Series[0].Points.AddXY((i+1), dataQueue.ElementAt(i));
   }
  }
 
  /// <summary>
  /// 初始化图表
  /// </summary>
  private void InitChart() {
   //定义图表区域
   this.chart1.ChartAreas.Clear();
   ChartArea chartArea1 = new ChartArea("C1");
   this.chart1.ChartAreas.Add(chartArea1);
   //定义存储和显示点的容器
   this.chart1.Series.Clear();
   Series series1 = new Series("S1");
   series1.ChartArea = "C1";
   this.chart1.Series.Add(series1);
   //设置图表显示样式
   this.chart1.ChartAreas[0].AxisY.Minimum = 0;
   this.chart1.ChartAreas[0].AxisY.Maximum =100;
   this.chart1.ChartAreas[0].AxisX.Interval = 5;
   this.chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
   this.chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
   //设置标题
   this.chart1.Titles.Clear();
   this.chart1.Titles.Add("S01");
   this.chart1.Titles[0].Text = "XXX显示";
   this.chart1.Titles[0].ForeColor = Color.RoyalBlue;
   this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
   //设置图表显示样式
   this.chart1.Series[0].Color = Color.Red;
   if (rb1.Checked)
   {
    this.chart1.Titles[0].Text =string.Format( "XXX {0} 显示",rb1.Text);
    this.chart1.Series[0].ChartType = SeriesChartType.Line;
   }
   if (rb2.Checked) {
    this.chart1.Titles[0].Text = string.Format("XXX {0} 显示", rb2.Text);
    this.chart1.Series[0].ChartType = SeriesChartType.Spline;
   }
   this.chart1.Series[0].Points.Clear();
  }
 
  //更新队列中的值
  private void UpdateQueueValue() {
 
   if (dataQueue.Count > 100) {
    //先出列
    for (int i = 0; i < num; i++)
    {
     dataQueue.Dequeue();
    }
   }
   if (rb1.Checked)
   {
    Random r = new Random();
    for (int i = 0; i < num; i++)
    {
     dataQueue.Enqueue(r.Next(0, 100));
    }
   }
   if (rb2.Checked) {
    for (int i = 0; i < num; i++)
    {
     //对curValue只取[0,360]之间的值
     curValue = curValue % 360;
     //对得到的正玄值,放大50倍,并上移50
     dataQueue.Enqueue((50*Math.Sin(curValue*Math.PI / 180))+50);
     curValue=curValue+10;
    }
   }
  }
 }
}

备注

关于定时器Timer【微软自带的控件】:

说明:表示在相同的时间间隔,引发用户自定义的事情 。实现用户需要的功能。本例中是用来定时更新队列中的数据,并刷新图表。

常用说明:

  1. Interval 时间间隔,以毫秒为单位,本例是300毫秒。
  2. Tick 定时触发的事件,本例对应timer1_Tick事件方法。
  3. Start(),Stop() 表示定时器的启动和停止。Enabled 表示定时器是否启用,默认值为 false,需要手动设置为true。

C# 绘制实时折线图,波形图

由于需要源码的比较多,故将源码下载链接放于此处,请自行下载,谢谢

源码下载

以上就是C# 绘制实时折线图,波形图的详细内容,更多关于C# 折线图,波形图的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/hsiang/p/6242641.html

延伸 · 阅读

精彩推荐
  • C#如何通过IL了解C#类的构造函数浅析

    如何通过IL了解C#类的构造函数浅析

    这篇文章主要给大家介绍了关于如何通过IL了解C#类的构造函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    叶落劲秋3692022-03-09
  • C#unity实现虚拟摇杆控制Virtual Joystick

    unity实现虚拟摇杆控制Virtual Joystick

    这篇文章主要为大家详细介绍了unity实现虚拟摇杆控制Virtual Joystick,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    代码黑洞_9852022-09-01
  • C#c#基础系列之值类型和引用类型的深入理解

    c#基础系列之值类型和引用类型的深入理解

    这篇文章主要给大家介绍了关于c#基础系列之值类型和引用类型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    大菜11552022-03-01
  • C#C#实现定时关机小应用

    C#实现定时关机小应用

    这篇文章主要为大家详细介绍了C#实现定时关机小应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Genven_Liang7012022-07-31
  • C#C#对Windows服务组的启动与停止操作

    C#对Windows服务组的启动与停止操作

    这篇文章主要为大家详细介绍了C#对Windows服务组的启动与停止操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    马洪彪10392022-02-21
  • C#用C#做网络爬虫的步骤教学

    用C#做网络爬虫的步骤教学

    在本篇内容里小编给大家分享的是关于用C#做网络爬虫的步骤和方法,需要的朋友们可以参考下。...

    C#教程网7912022-03-07
  • C#基于C# 写一个 Redis 数据同步小工具

    基于C# 写一个 Redis 数据同步小工具

    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这篇文章主要介绍了用 C# 写一个...

    Love it or leave it4892022-08-24
  • C#C#遍历文件夹及其子目录的完整实现方法

    C#遍历文件夹及其子目录的完整实现方法

    这篇文章主要介绍了C#遍历文件夹及其子目录的方法,涉及C#文件与目录的基本操作技巧,简单实用,具有一定参考借鉴价值,需要的朋友可以参考下...

    Eversnow6102021-11-29