C#chart绘折线图动态添加数据

2023-05-16

C#入门基础,实现chart控件动态添加数据

源程序https://download.csdn.net/download/qq_42237381/10742048

目录

一、效果示意

二、原理说明

三、代码参考


一、效果示意

最终程序运行效果如图

点击开始,将随机生成的两组数据添加进折线图里,chart1和chart2 只显示10个数,超过10个数将第一个传进来的数删掉

chart3是将chart1和chart2 的所有数据显示,两条不同的Y轴。

勾选框可以选择chart只显示其中一条线

二、原理说明

点击开始后,timer_tick定时器开始运行,生成两个随机数(速度和距离),添加进两个泛型数组和队列里,

泛型数组每生成新数据就添加进去,队列保持十个数,超过就将先进来的数删掉(FIFO),使表一显示距离队列,表二显示速度队列,表三显示距离和速度的泛型数组。

再添加checkedListBox勾选框,根据是否选中更改表三显示内容

关键点。使用timer定时器生成随机数,调用方法类

三、代码参考

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.Drawing.Drawing2D;
using System.Windows.Forms.DataVisualization.Charting;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {


        private double dm = 0;
        private double vm = 0;         //速度

        private double ss, st = 0;        //时间间隔
        private List<double> VM = new List<double>(100);
        private List<double> DM = new List<double>(100);
        private Queue<double> Vm = new Queue<double>(100);
        private Queue<double> Dm = new Queue<double>(100);
        private bool Ready = false;
        private bool contrl = false;

        public Form1()
        {
            InitializeComponent();
        }
        //--------距离监测图表-----------//
        //入口参数:  无                      //
        //                                   //
        private void DistanceData_Line()
        {
            this.chart1.ChartAreas.Clear();
            ChartArea chartarea = new ChartArea("距离监测");
            this.chart1.ChartAreas.Add(chartarea);

            chartarea.AxisX.MajorGrid.LineColor = System.Drawing.Color.Transparent;
            chartarea.AxisY.MajorGrid.LineColor = System.Drawing.Color.Black;
            chartarea.AxisX.ScrollBar.Enabled = false;
            //chartarea.AxisY.Minimum = 0;
            //chartarea.AxisY.Maximum = 10000;
            chartarea.AxisX.Interval = 5;
            chartarea.AxisX.MajorGrid.LineColor = System.Drawing.Color.Transparent;
            chartarea.AxisY.MajorGrid.LineColor = System.Drawing.Color.Black;

            //chartarea.AxisX.ScrollBar.Enabled = false;
            //指当前显示的是第几个           
            //chartarea.AxisX.ScaleView.Size = 10;
            //表头
            this.chart1.Titles.Clear();
            this.chart1.Titles.Add("距离监测");
            this.chart1.Titles[0].Text = "距离监测";
            this.chart1.Titles[0].ForeColor = Color.Red;
            this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans serif", 12f);

            //定义存储和显示点的容器
            this.chart1.Series.Clear();
            Series series = new Series("距离");
            series.ChartType = SeriesChartType.Spline;
            series.ChartArea = "距离监测";
            series.Color = Color.Yellow;
            series.MarkerBorderWidth = 2;
            series.MarkerSize = 4;
            series.MarkerStyle = MarkerStyle.Diamond;
            series.ToolTip = "距离" + "#VAL \r\n #AXISLABEL";
            chart1.Series.Add(series);

        }


        //--------速度监测图表-----------//
        //入口参数:   无                       //      
        private void VelocityData_Line()
        {

            //定义表区域
            this.chart2.ChartAreas.Clear();
            ChartArea chartarea = new ChartArea("速度监测");
            this.chart2.ChartAreas.Add(chartarea);
            chartarea.AxisX.MajorGrid.LineColor = System.Drawing.Color.Transparent;
            chartarea.AxisY.MajorGrid.LineColor = System.Drawing.Color.Black;
            chartarea.AxisX.ScrollBar.Enabled = false;
            //chartarea.AxisY.Minimum = 0;
            //chartarea.AxisY.Maximum = 100;
            chartarea.AxisX.Interval = 5;
            chartarea.AxisX.MajorGrid.LineColor = System.Drawing.Color.Transparent;
            chartarea.AxisY.MajorGrid.LineColor = System.Drawing.Color.Black;
            //chartarea.AxisX.ScrollBar.Enabled = false;
            指当前显示的是第几个           
            //chartarea.AxisX.ScaleView.Size = 10;
            //表头
            this.chart2.Titles.Clear();
            this.chart2.Titles.Add("速度监测");
            this.chart2.Titles[0].Text = "速度监测";
            this.chart2.Titles[0].ForeColor = Color.Red;
            this.chart2.Titles[0].Font = new System.Drawing.Font("Microsoft Sans serif", 12f);
            //定义存储和显示点的容器
           
            this.chart2.Series.Clear();
            Series series = new Series("速度");
            chart2.Series.Add(series);
            series.ChartArea = "速度监测";
            series.ChartType = SeriesChartType.Spline;
            series.MarkerBorderWidth = 2;
            series.MarkerSize = 4;
            series.MarkerStyle = MarkerStyle.Diamond;
            series.ToolTip = "速度" + "#VAL \r\n #AXISLABEL";

        }
        //--------飞行数据监测图表-----------//
        //入口参数:   无                       //      
        private void FlyData_Line()
        {

            //定义表区域
            this.chart3.ChartAreas.Clear();
            ChartArea chartarea = new ChartArea("数据监测");
            this.chart3.ChartAreas.Add(chartarea);
            chartarea.AxisX.Maximum = VM.Count;
            chartarea.AxisX.MajorGrid.LineColor = System.Drawing.Color.Transparent;
            chartarea.AxisY.MajorGrid.LineColor = System.Drawing.Color.Black;
            chartarea.AxisX.ScrollBar.Enabled = false;
            //chartarea.AxisY.Minimum = 0;
            //chartarea.AxisY.Maximum = 100;
            chartarea.AxisX.Interval = 5;
            chartarea.AxisX.MajorGrid.LineColor = System.Drawing.Color.Transparent;
            chartarea.AxisY.MajorGrid.LineColor = System.Drawing.Color.Black;
            //chartarea.AxisX.ScrollBar.Enabled = false;
            指当前显示的是第几个           
            //chartarea.AxisX.ScaleView.Size = 10;
            //表头
            this.chart3.Titles.Clear();
            this.chart3.Titles.Add("数据监测");
            this.chart3.Titles[0].Text = "数据监测";
            this.chart3.Titles[0].ForeColor = Color.Red;
            this.chart3.Titles[0].Font = new System.Drawing.Font("Microsoft Sans serif", 12f);
            //定义存储和显示点的容器
            this.chart3.Series.Clear();
            for (int i = 0; i < 2; i++)
            {
                Series series = new Series(DATATYPE[i]);
                chart3.Series.Add(series);
                series.ChartArea = "数据监测";
                series.ChartType = SeriesChartType.Spline;
                series.MarkerBorderWidth = 2;
                series.MarkerSize = 4;
                series.MarkerStyle = MarkerStyle.Diamond;
                series.ToolTip = DATATYPE[i] + "#VAL \r\n #AXISLABEL";
            }
            this.chart3.Series[0].YAxisType = AxisType.Primary;
            this.chart3.Series[1].YAxisType = AxisType.Secondary;
        }

        private static string[] DATATYPE = { "速度", "距离" };
        //--------飞行轨迹数据导入图表-------------------------           //
        //入口参数:                                                       //
        //距离:  dM                                                       //
        //速度:  vM                                                       //
        private void ChartData()
        {

            if (Vm.Count > 10)//当数据大于十,删除第一位数
            {
                Vm.Dequeue();

                Dm.Dequeue();

            }
            if (Ready == true)
            {

                VM.Add(vm);
                DM.Add(dm);
                Vm.Enqueue(vm);
                Dm.Enqueue(dm);
               

            }
            for (int i = 0; i < Vm.Count; i++)
            {
                this.chart1.Series[0].Points.AddY(Vm.ElementAt(i));
                this.chart2.Series[0].Points.AddY(Dm.ElementAt(i));
            }
            for (int i = 0; i < VM.Count; i++)
            {

                //指示速度是否显示
                if (checkedListBox1.GetItemChecked(0) == true)
                {
                    this.chart3.Series[0].Points.AddY(VM.ElementAt(i));
                }
                if (checkedListBox1.GetItemChecked(0) == false)
                {
                    this.chart3.Series[0].Points.Clear();
                }
                //指示距离是否显示
                if (checkedListBox1.GetItemChecked(1) == true)
                {
                    this.chart3.Series[1].Points.AddY(DM.ElementAt(i));
                }
                if (checkedListBox1.GetItemChecked(1) == false)
                {
                    this.chart3.Series[1].Points.Clear();
                }

            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (contrl == false)
            {
                Ready = true;
                button1.Text = "停止";
                contrl = true;
               
            }
            else 
            {
                Ready = false;
                button1.Text = "开始";
                contrl = true;
                
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                checkedListBox1.SetItemChecked(i, true);                
            }
            timer1.Enabled = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Random rd = new Random();
            vm = rd.Next(0, 100);
            dm = rd.Next(0, 500);
            
            FlyData_Line();
            VelocityData_Line();
            DistanceData_Line();
            ChartData();
        }
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#chart绘折线图动态添加数据 的相关文章

  • Windows ❀ 解决Google浏览器无法访问网页问题

    文章目录 问题 xff1a Google浏览器无法访问网页解决方法 问题 xff1a Google浏览器无法访问网页 使用Google浏览器打开某个已知安全网页时 xff0c 弹出如下信息 xff0c 错误内容如下 xff1a NET ER
  • Security ❀ CSP Bypass 内容安全策略绕过

    文章目录 内容安全策略绕过 CSP Bypass1 Low Level2 Medium Level3 High Level4 Impossible Level 内容安全策略绕过 CSP Bypass CSP 内容安全策略 xff1a 为了缓
  • Security ❀ JavaScript Attacks 前端攻击

    文章目录 JavaScript Attacks 前端攻击1 Low Level2 Medium Level3 High Level4 Impossible Level JavaScript Attacks 前端攻击 JavaScript是一
  • MiddleWare ❀ Zookeeper基础概述

    文章目录 1 认识Zookeeper1 1 数据类型1 2 监听器1 3 基本功能1 3 1 统一配置管理1 3 2 统一命名服务1 3 3 分布式锁1 3 4 集群状态 2 下载安装包3 安装服务3 1 服务端命令3 2 客户端命令 3
  • Java文件内容变更及内容追加监听方案

    简介 对于文件内容变动的监听处理 xff0c 一般分为两种主要应用场景 1 只关心文件内容是否发生变更 文件的内容发生变动的场景是全量修改模式 xff0c 不是内容追加模式 例如某xml文件内容发生变动 这种情况 xff0c 我们一般只需要
  • MiddleWare ❀ MySQL基础概述

    文章目录 MySQL基础1 SQL语法与分类1 1 DDL 数据定义语言1 1 1 库操作1 1 1 1 查询1 1 1 2 创建1 1 1 3 删除1 1 1 4 使用 1 1 2 表 43 字段操作1 1 2 1 查询1 1 2 2 创
  • Shell ❀ 基础知识概述

    文章目录 一 基本概念1 脚本文件命名方式2 解释器分类3 基本基本组成内容4 脚本编写规范与格式说明5 自动生成脚本的注释与配置信息 一 基本概念 shell又称为命令解释器 xff0c 它能识别用户输入的各种命令 xff0c 并传递给操
  • Shell ❀ 基础变量类别与引用

    文章目录 二 变量与引用1 变量命名2 变量类型3 变量定义4 常用变量4 1 内置通配符4 2 内置变量4 3 自定义变量4 4 环境变量4 5 变量的作用域4 5 1 全局变量4 5 2 局部变量 4 6 位置变量4 5 1 位置变量的
  • Shell ❀ 条件测试语句

    文章目录 三 条件测试1 基本语法2 表达式2 1 条件判断表达式2 2 字符串判断表达式2 3 数字判断表达式2 4 文件判断表达式2 5 表达式中 与 的区别2 5 1 的逻辑判断表达式2 5 2 的逻辑判断表达式 三 条件测试 1 基
  • Shell ❀ 条件判断语句

    文章目录 四 条件判断1 if 单分支格式1 1 语法格式1 2 操作案例 2 if else 双分支格式2 1 语法格式2 2 操作案例 3 if elif else 多分支结构3 1 语法格式3 2 操作案例 4 和 复合指令4 1 相
  • Shell ❀ 循环语句

    文章目录 五 循环语句1 for 循环1 1 带列表的for循环1 2 不带列表的for循环1 3 类C风格的for循环 2 while 循环2 1 循环体读取文件的三种方法2 2 循环类型 3 嵌套循环案例 五 循环语句 1 for 循环
  • Shell ❀ 函数与数组

    文章目录 六 函数与数组1 函数1 1 函数定义1 2 函数的优势1 3 函数语法1 4 函数调用1 5 操作案例1 6 函数库文件1 7 递归函数 2 数组2 1 数组定义2 2 定义股关联数组2 3 数组的赋值2 4 数组操作2 5 数
  • Shell ❀ 正则表达式

    文章目录 七 正则表达式1 普通字符2 非打印字符3 特殊字符4 限定字符5 常用的正则表达式5 1 校验数字的表达式5 2 校验字符的表达式5 3 特殊需求表达式 七 正则表达式 正则表达式 Regular Expression xff1
  • Shell ❀ 三剑客 - Grep + Sed + Awk

    文章目录 八 三剑客 Grep 43 Sed 43 Awk1 Grep 过滤1 1 常用grep参数1 2 使用方法 2 Sed 行匹配2 1 执行原理2 2 常见语法2 3 使用方法2 3 1 地址边界的设定2 3 2 基础编辑命令2 3
  • Shell ❀ 学习笔记与知识点梳理

    基础知识概述基础变量类别与引用条件测试语句条件判断语句循环语句函数与数组正则表达式三剑客 Grep 43 Sed 43 Awk
  • 使用 Schema xsd 文件校验 xml 文件格式

    本文是实例代码工具类 xff1a span class token keyword import span span class token namespace org span class token punctuation span x
  • Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍

    nbsp Linux 查看磁盘分区 文件系统 使用情况的命令和相关工具介绍 提要 Linux 磁盘分区表 文件系统的查看 统计的工具很多 有些工具是多功
  • MiddleWare ❀ Elasticsearch请求详解

    文章目录 Elasticsearch请求详解 Elasticsearch请求详解 span class token comment 创建索引 重复创建报错 span span class token function curl span s
  • 树莓派自带VNC黑屏(灰屏)个人解决办法

    最近购买了树莓派 xff14 xff22 看来许多教程 xff0c 但VNC第一次还正常显示 xff0c 后来就黑屏 xff0c 还有什么现在不能显示桌面什么的 xff0c 下面给大家说下vnc黑屏我的解决办法 xff0c 我发现是vncv
  • Openmv色块追踪

    Openmv 拿到后第一次进行开发 xff08 颜色追踪 xff09 Openmv本身是具有很多的内置函数的 xff0c 基本都是别人给我们写好了 xff0c 需要我们自己去调用 xff0c 并给函数传递参数以实现我们需要的效果 但是很多初

随机推荐

  • XTDrone中roslaunch px4 indoor1.launch

    logging to home luyu ros log f8336262 666f 11ec ad21 4287fcc6d992 roslaunch luyu Lenovo 32405 log Checking log directory
  • Git的基本使用方法(0基础小白也能看懂)详细教程(含视频讲解)

    git指令介绍 xff0c 下面有详解指令可以先跳过直接看下面的详解 mkdir learngit 创建一个learngit文件夹 cd learngit 进入learngit文件夹 pwd 用于显示当前目录 git init 把这个目录变
  • 2020/05/25 Prometheus监控k8s企业级应用 1

    2 2 课程介绍及课程大纲 普罗米修斯的配置很难 2 3 Prometheus监控软件概述 prometheus是一名google的前员工写的 xff0c 也是go语言写的 xff0c K8S是第一个托管的项目 xff0c promethe
  • 现代信号处理——自适应滤波器(卡尔曼滤波)

    一 Kalman滤波的过程方程和观测方程 假设某系统n时刻的状态变量为x n 过程方程 xff1a x n 43 1 61 F n 43 1 xff0c n x n 43 v1 n 观测方程 xff1a y n 61 C n x n 43
  • 联想SR590服务器管理界面配置

    1 连接登录远程管理界面 将笔记本和服务器的管理口用网线连接 xff0c 配置笔记本的ip地址 xff0c 改成192 168 70 XXX xff0c 255 255 255 0 xff0c 如下图 xff1a 改完ip地址ping一下服
  • Qt鼠标点击不响应QMouseEvent事件的解决办法

    最近在写程序在和同事合完代码后发现一个问题 项目是使用qt开发一个程序 有一个功能是要实现地图的标记功能 我需要在一个label控件上显示地图 然后再选中标记按钮后点击地图 会在鼠标点击的位置放置一个标记的图标并储存备注信息 那么实现这个功
  • 匿名飞控程序整理

    主程序框图如下 xff0c 接下来我会将各个模块全部单独整理出来 xff0c 一是分享 xff0c 也是给自己留个便于查阅 主函数main c int main void flag start ok 61 All Init 进行所有设备的初
  • ORB_SLAM2 运行TUM RGBD数据集过程记录

    一 编译代码 这里是用ubuntu20 04 opencv4安装orbslam2的一点记录 报错信息经过搜索找到了对应的解决办法 xff0c 在这里做一个笔记 报错1 xff1a FATAL ERROR 34 OpenCV gt 2 4 3
  • 匿名飞控设备初始化All_Init()函数代码整理

    目录 初始化All Init 1 Para Data Init 参数初始化 2 Remote Control Init 遥控器输入类型 3 PWM Out Init 电调输出的初始化 4 spi 2初始化 xff0c 用于读取飞控板上所有传
  • 匿名飞控线程初始化和调度是怎么实现的

    目录 一 线程初始化 先看下Scheduler Setup xff08 xff09 函数 xff0c 二 任务调度器 函数在文件Ano Scheduler c中 xff0c Scheduler Setup xff08 xff09 初始化后
  • QGC编译报错error C2220: 警告被视为错误 最佳解决方法

    前面搜了一下 xff0c 试过各种方法依然报错 xff0c 先整理别人的解决方法 目录 一 重新保存文件 二 xff0c 更改编码方式 三 最终解决方案 xff1a 修改配置文件 一 重新保存文件 注意这里的配置 Wx WX 二 xff0c
  • 整理px4飞控校准机制和qgc校准机制

    用qgc执行 px4飞控传感器校准时 的步骤确实很麻烦 xff0c 磁罗盘需要转6个面 xff0c 加速度计也需要6个面 大疆无人机的校准很简单 xff0c 加速度计需要静置一会 xff0c 磁罗盘校准也就转一个面就行了 xff0c 就算学
  • mavros操作飞机时方向位置改为机体坐标系下指令

    前面试了很多 xff0c 看官网里的说明 用 mavros setpoint raw local 34 里的frame id改为 34 base link 34 不行 又直接发mavros msgs PositionTarget 修改里面的
  • px4室内飞行通过SLAM发送位置消息

    先按照官方的教程设置好飞控参数 http docs px4 io master zh computer vision visual inertial odometry html 下载源码学习 xff1a https github com A
  • MCUXpresso调试FreeRTOS时显示多线程

    多线程程序调试起来确实麻烦 xff0c 在调试过程中默认只能看到当前线程 按照以下配置即可在程序暂停时查看多线程的状态 xff1a 在debug配置中选中下图所示 xff1a 配置完成后再调试程序即可显示多线程
  • px4 编译生成msg消息机制及将其移植方法

    目录 一 在px4中添加新的Topic 二 px4生成msg生成的结构体优势 三 msg生成工具及移植方法 一 在px4中添加新的Topic 在px4中是通过uorb进行消息的传递 xff0c 通过根目录下的msg文件可以添加自定义的消息
  • px4传感器数据sensor模块整理

    涉及传感器数据的流程 xff0c 大致整理如下图 传感器的数据从drivers中调用lib中dirvers对应的对象更新数据并发布出去 xff0c sensor模块通过订阅原始数据和校准参数 xff0c 对数据滤波并更正 xff0c 然后再
  • C#实现程序一次打开两个窗口,两个窗口分别放置在两个屏幕

    这是本人在编程中碰到的一个问题 xff0c 寻找了其他案例 xff0c 都只是同时打开两窗口 xff0c 但不能实现在拥有两块显示屏时候 xff0c 分别将两个不同的窗口显示在两个单独的屏幕 源代码https download csdn n
  • 探寻C#事件本质

    我最先在学习C 事件的时候 xff0c 阅读了许多书籍 xff0c 但总是不能对事件建立起一个比较清晰的概念 xff0c 对其内部机制和原理也是似是而非 xff0c 因为这些书籍在描述事件的时候总是夹杂许多其他不能理解的抽象术语 xff0c
  • C#chart绘折线图动态添加数据

    C 入门基础 xff0c 实现chart控件动态添加数据 源程序https download csdn net download qq 42237381 10742048 目录 一 效果示意 二 原理说明 三 代码参考 一 效果示意 最终程