此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]之间的随即数进行填充】:

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

核心代码

代码如下:

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 Form1(){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倍,并上移50dataQueue.Enqueue((50*Math.Sin(curValue*Math.PI / 180))+50);curValue=curValue+10;}}}}
}

完整代码下载地址:C# 实时折线图,波形图

备注

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

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

常用说明:

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

C# 实时折线图,波形图相关推荐

  1. 实时折线图php mysql 源码_超级漂亮网址导航源码,自助链源码(PHP+MYSQL完整版)...

    品牌: 其他 语言: PHP 数据库: Mysql 源文件: 完全开源(含全部源文件) 授权: 免授权 规格: 整站源码 移动端: 无移动端 安装服务: 收费安装(另补差价) 操作系统: Window ...

  2. echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图

    有时候我们的图表需要根据后台数据每秒实时更新,那么用echarts应该如何实现呢?2020.11.27发现篇文章很多人关注,但之前写的不是很清楚,今天更新下,大家有问题可以也留言讨论.这是一个仿win ...

  3. echars显示折点数据_Echarts 折线图一个点显示多个实时数据tooltip

    在项目开发需要中.有个需求就是在折线图的每一个折点上悬浮窗要显示几条不同的数据而且是跟x轴一样每个点不一样..研究了一下..有点坑.其实很简单,正常的思路来想 要想在悬浮窗显示数据 一般都会有线 才会 ...

  4. 双y轴设置 颜色_项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、实时下位机数据)...

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400长期持续带来更多项目与技术分享 ...

  5. echarts折线图怎么从y轴开始_基于echarts的双y轴实时更新折线图

    一款基于echarts的双y轴实时更新折线图效果,页面加载后开始自动更新数据并绘制对应的折线图,可以点击右上角的按钮:显示数据视图.刷新数据和将数据存储为png的图片. 查看演示 下载资源: 46 次 ...

  6. echarts 时间曲线图_web前端显示设备实时温度,ECharts实现温度折线图,实时动态温度曲线图生成...

    web前端显示设备实时温度, 具体步骤如下: 1.在页面中引入ECharts文件echarts-all.js 2.在body中为ECharts准备一个具备大小(宽高)的Dom 3.具体JS代码如下: ...

  7. html 实时曲线 js,基于d3.js实现实时刷新的折线图

    先来看看效果图 下面直接上源代码,html文件 实时刷新折线图 .axis path, .axis line{ fill: none; stroke: black; shape-rendering: ...

  8. oc和swift版本的实时绘制曲线、折线图,股票折线图

    oc和swift版本的实时绘制曲线.折线图,股票折线图,可设置曲线背景颜色,支持渐变颜色背景 demo:https://download.csdn.net/download/Wulitc/875132 ...

  9. Python基于周立功盒子接收特定报文信号并实时绘制折线图(二)

    Python基于周立功盒子接收特定报文信号并实时绘制折线图(二) 一.背景     根据在上一篇文件Python基于周立功盒子接收特定报文信号并实时绘制折线图(一)的基础上需要做一些优化,原因是,因为 ...

最新文章

  1. 【leetcode 简单】 第七十三题 丑数
  2. Paper:《A Few Useful Things to Know About Machine Learning—关于机器学习的一些有用的知识》翻译与解读
  3. 学习笔记(二)——直方图均衡化和匹配
  4. WPF的自定义控件 依赖属性,DependencyProperty 路由事件RoutedEvent
  5. android开发我的新浪微博客户端-登录页面UI篇(4.1)
  6. 如何解决安装CentOS时遇到引导分区位于一个GPT分区方案的错误提示问题
  7. 新版本chrome浏览器带来的跨域请求cookie丢失问题
  8. python支持向量机回归_Python机器学习之支持向量机——非线性SVC
  9. R语言将数据框中的字符类型数字转换为数值
  10. python建模预测_技术分享 - python数据分析(6)——挖掘建模(1)分类与预测
  11. Vim,人类史上最好用的文本编辑器!从此以后你就是一个善良的极客!
  12. word嵌入对象依损坏_在Word 2010中,当文档中插入图片对象后,可以通过设置图片的文字环绕方式进行图文混排,下列是Word提供的文字环绕方式的是()。...
  13. 淘宝API 添加上传商品图片
  14. 百度api爬虫(1)从百度api中爬取地点数据
  15. trie图:Computer Viruses in Planet Pandora
  16. unsigned详讲(干货满满)
  17. 《计算机网络技术》第四章课后习题答案(全)
  18. outlook2007 配置
  19. 【ESP32_8266_WiFi (二)】接入点模式、无线终端模式
  20. 【转】程序语言不是工具

热门文章

  1. 承上启下:基于全域漏斗分析的主搜深度统一粗排
  2. 圆桌对话 | 详解2022全域营销的应用趋势和机会
  3. Java虚拟机的垃圾回收器以及内存分配策略详解
  4. 4.微信小程序-B站:先把首页造出来
  5. SETP7 Basic V11 SP1
  6. windows10Qt+vc2017下安装Qtxlsx
  7. 在word中如何实现章节标题自动编号
  8. logback - 自定义日志脱敏组件,一种不错的脱敏方案
  9. 纯css实现科技感十足的方格闪烁背景
  10. office和WPS的问题