C#动态绘制多条曲线的方法

本文实例为大家分享了C#动态绘制多条曲线的具体代码,供大家参考,具体内容如下

实时绘制多条曲线,纵轴为数值,横轴为时间,精确到毫秒

实现效果如下:

代码:

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;

namespace chartTest
{
    public partial class Form1 : Form
    {
        private int maxSize=20;     //图表显示的数据最大数量
        private Queue<string> getX = new Queue<string>();   //存储x坐标
        private Queue<Int32> getY = new Queue<int>();   //存储y坐标

        System.Timers.Timer timer1 = new System.Timers.Timer();
        public Form1()
        {
            InitializeComponent();
        }

        //获取时间轴横坐标
        private string  setX() 
        {
            string time = DateTime.Now.ToString("mm:ss.fff");
            /* if (getX.Count > 15)
             {
                 getX.Dequeue();
             }
             else 
             {
                 getX.Enqueue(time);
             }*/
            return time;
        }
        //获取值 纵坐标
        private int  setY1() 
        {
            int y = new Random().Next(-100, 0);
            /* if (getY.Count > 15)
             {
                 getY.Dequeue();
             }
             else 
             {
                 getY.Enqueue(y);
             }*/
            return y;
        }
        private int setY2()
        {
            int y = new Random().Next(-200, 100);
            /* if (getY.Count > 15)
             {
                 getY.Dequeue();
             }
             else 
             {
                 getY.Enqueue(y);
             }*/
            return y;
        }
        private int setY3()
        {
            int y = new Random().Next(100, 300);
            /* if (getY.Count > 15)
             {
                 getY.Dequeue();
             }
             else 
             {
                 getY.Enqueue(y);
             }*/
            return y;
        }

        private double setY4()
        {
            double y0 = new Random().Next(100, 300);
            double y = y0 * 0.1;
            /* if (getY.Count > 15)
             {
                 getY.Dequeue();
             }
             else 
             {
                 getY.Enqueue(y);
             }*/
            return y;
        }

        //将坐标点添加进系列进行绘图
        private void paint() 
        {
            try
            {
                //series1
                if (chart1.Series[0].Points.Count > maxSize) 
                {
                    chart1.Series[0].Points.RemoveAt(0);
                    chart1.Series[0].Points.AddXY(setX(), setY1());
                }
                else
                { 
                    chart1.Series[0].Points.AddXY(setX(), setY1());
                }

                //series2
                if (chart1.Series[1].Points.Count > maxSize)
                {
                    chart1.Series[1].Points.RemoveAt(0);
                    chart1.Series[1].Points.AddXY(setX(), setY2());
                }
                else
                {
                    chart1.Series[1].Points.AddXY(setX(), setY2());
                }

                //series3
                if (chart1.Series[2].Points.Count > maxSize)
                {
                    chart1.Series[2].Points.RemoveAt(0);
                    chart1.Series[2].Points.AddXY(setX(), setY3());
                }
                else
                {
                    chart1.Series[2].Points.AddXY(setX(), setY3());
                }

                //series4
                if (chart1.Series[3].Points.Count > maxSize)
                {
                    chart1.Series[3].Points.RemoveAt(0);
                    chart1.Series[3].Points.AddXY(setX(), setY4());
                }
                else
                {
                    chart1.Series[3].Points.AddXY(setX(), setY4());
                }
            }
            catch
            { }
            
        }

        
        private void timer2_Tick(object sender, EventArgs e)
        {
            setX();
            setY1();
            setY2();
            setY3();
            setY4();
            paint();              //调用画图方法,显示动态折线图
        }

        private void btn_start_Click(object sender, EventArgs e)
        {
            if (btn_start.Text.Equals("开始"))
            {
                btn_start.Text = "停止";
                timer2.Enabled = true;
            }
            else
            {
                btn_start.Text = "开始";
                timer2.Enabled = false;
            }
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现鼠标移动到曲线图上显示值的方法

    本文实例讲述了C#实现鼠标移动到曲线图上显示值的方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 完成折线图报表后,产品经理要求把折线上的数值去掉,鼠标经过折线点时显示数值. 二.实现方法: 该方法针对dotnetcharting 下的charting折线图报表使用. 实现思路为,在该窗体上添加一个lable标签,当鼠标经过折线点时获取该点的x轴,y轴值和鼠标坐标值.然后将lable的坐标标记为鼠标所在坐标,并且给lable赋值,并且将lable显示出来.   具体实现代码如下: 复制

  • C#画笔Pen绘制光滑模式曲线的方法

    本文实例讲述了C#画笔Pen绘制光滑模式曲线的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namesp

  • c# 实时曲线图示例代码

    示例目的:使用时间器添加曲线图的点,以达到实时描绘曲线图的效果.X轴显示时分,Y轴显示0-20的随机数 1. 必须安装DevExpress控件,没有安装的朋友可以使用下面的链接下载安装 https://www.jb51.net/softs/547627.html 2. 新建Windows窗体应用程序,直接在工具箱搜索ChartControl并使用改组件 3. 添加曲线图,并设置其属性 当拖拉该组件到窗体设计页面时,会弹出[Chart Designer],可在此处添加曲线图,并设置其属性 3.1.

  • C#实现贝塞尔曲线的方法

    本文实例为大家分享了C#实现贝塞尔曲线的具体代码,供大家参考,具体内容如下 话不多直接上代码 public Transform[] controlPoints; //曲线的控制点 ,最少三个,起点,弧度点,终点     public GameObject codeGameObject; //要动的物体     private int _segmentNum = 50; //运动物体过程分的段数     private int numIndex = 1;      void Start()    

  • C#使用Chart绘制曲线

    本文实例为大家分享了C#使用Chart绘制曲线的具体代码,供大家参考,具体内容如下 新建一个控制台应用程序,程序名:WindowsFormsApp2,将下面的代码拷贝进去即可 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using

  • C#实现chart控件动态曲线绘制

    本文实例为大家分享了C#实现chart控件动态曲线绘制的具体代码,供大家参考,具体内容如下 思想 实验室要做一个动态曲线绘制,网上方法很多,但是缺乏完整代码和效果图的整合,往往总是缺少其一,因此整理如下,方便大家编程,节约时间.思路:新建一个队列,利用timer控件,动态的往队列中加入数据,每次触发事件,就相当于将队列中的值全部重新画一遍. 我的目的是做四个点的动态监测,所以代码重复了四次,其实应该用4个线程来做,思路就显得较为清晰了,这也是可以改进的地方. public partial cla

  • C#绘制实时曲线的方法

    本文实例为大家分享了C#绘制实时曲线的具体代码,供大家参考,具体内容如下 1.要做一个调试工具,采集传感器数据并显示.绘制曲线注意坐标反转,线条的张力即可.项目中的曲线是从右往左显示的,线条的坐标都放在list里了,效果如下图: 2.上代码 public class DrawingCurve     {         private Graphics graphics; //Graphics 类提供将对象绘制到显示设备的方法         private Bitmap bitmap; //位

  • c# 曲线图生成代码

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; using System.Drawing.Imaging; using System.Collections; namespace Curve { public cl

  • C#绘制曲线图的方法

    本文实例讲述了C#绘制曲线图的方法.分享给大家供大家参考.具体如下: 1. 曲线图效果: 2. C#代码: /// <summary> /// 自动根据参数调整图像大小 /// </summary> public void Fit() { //计算字体距离 intFontSpace = FontSize + 5; //计算图像边距 float fltSpace = Math.Min(Width / 6, Height / 6); XSpace = fltSpace; YSpace

  • C#画笔Pen绘制曲线的方法

    本文实例讲述了C#画笔Pen绘制曲线的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace

随机推荐