栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C# chart实时曲线

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# chart实时曲线

主要介绍使用C#的winform如何进行实时数据的动态加载的实例,并通过设置参考线来显示数据曲线的分布

文章目录
  • 前言
  • 一、运行效果图
  • 二、代码


前言

通过C#的winForm开发的一款实时曲线,动态显示数据,能够设置参考线

 

一、运行效果

二、代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace ChartControl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitChart();
            timer1.Interval = 1000;
        }

        /// 

        /// 图表对象
        /// 

        Series series;
        /// 

        /// x轴最大点数
        /// 

        int xValue = 60;
        /// 

        /// 开始时间
        /// 

        DateTime sDate;

        Random rand = new Random();

       
        Queue thinkness = new Queue(30) ;
        Queue recordTime = new Queue(30);

        private void InitChart()
        {
            series = chart1.Series[0];
            //清空原来数据缓存
            series.Points.Clear();

            //定义图表大小尺寸
            chart1.Width = Width - 90;
            chart1.Height = Height - 110;

            //以下按照先绘制chartArea、然后再绘制Series的步骤画图
            //chartArea背景颜色
            chart1.BackColor = Color.Azure;

            //X轴设置
            //chart1.ChartAreas[0].AxisX.Title = "时间";
            chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;
            chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;//不显示竖着的分割线

          
            chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss"; //X轴显示的时间格式,HH为大写时是24小时制,hh小写时是12小时制

            chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Seconds;//如果是时间类型的数据,间隔方式可以是秒、分、时
            //chart1.ChartAreas[0].AxisX.Interval = DateTime.Parse("00:05:00").Millisecond;//间隔为5分钟
            chart1.ChartAreas[0].AxisX.Interval = DateTime.Parse("00:00:02").Second;//TODO 测试--间隔为5秒
            //SetAxisX(2);
            //SetAxisXReal();
            //Y轴设置
            //chart1.ChartAreas[0].AxisY.Title = "数据点";
            chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Center;
            chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = true;//显示横着的分割线
            chart1.ChartAreas[0].AxisY.Minimum = 0;
            chart1.ChartAreas[0].AxisY.Maximum = 90;
            chart1.ChartAreas[0].AxisY.Interval = 20;

            //Series绘制
            //chart1.Series[0].LegendText = "瞬时速度";
            series.ChartType = SeriesChartType.Spline;
            
            series.XValueType = ChartValueType.DateTime;
            series.IsValueShownAsLabel = true;//显示数据点的值
            series.MarkerStyle = MarkerStyle.Diamond;//显示标记,菱形
        }

 private void button1_Click(object sender, EventArgs e)
        {
             timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //获取实时数据最近的60个数据
            UpdateChartData();
            //重新绘制曲折线图
            this.chart1.Series[0].Points.Clear();
            this.chart1.Series[0].Points.DataBindXY(recordTime, thinkness);
            //for (int i = 0; i < thinkness.Count; i++)
            //{
            //    this.chart1.Series[0].Points.AddXY(recordTime.ElementAt(i), thinkness.ElementAt(i));

            //}

        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }

        private void UpdateChartData()
        {
            if (thinkness.Count > 60)
            {
                for (int i = 0; i < 2; i++)
                {
                    thinkness.Dequeue();
                    recordTime.Dequeue();
                }

            }
            else
            {
                thinkness.Enqueue(rand.Next(20, 70));
                recordTime.Enqueue(DateTime.Now.ToOADate());
            }

        }

        private void ReferenceLine(double refernceValue,Chart charContor)
        {
           
            double max = refernceValue;
            StripLine stripMax = new StripLine();
            stripMax.Text = string.Format("最大:{0:F}", max);//展示文本
            stripMax.BackColor = Color.Yellow;//背景色
            stripMax.Interval = 0;//间隔
            stripMax.IntervalOffset = max;//偏移量
            stripMax.StripWidth = 0.001;//线宽
            stripMax.ForeColor = Color.White;//前景色
            stripMax.TextAlignment = StringAlignment.Near;//文本对齐方式
            charContor.ChartAreas[0].AxisY.StripLines.Add(stripMax);//添加到ChartAreas中
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ReferenceLine(Convert.ToDouble(textBox1.Text.Trim()), chart1);
        }
    }
}
 

改项目主要有两个重点,一、是队列的生成。二、队列绑定到chart的X轴和Y轴

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号