C# winform 多个chart动态曲线绘制(能局部放大)

C#中使用chart能很方便的实现动态曲线,使用自带的游标也能实现局部放大,可以很方便

实现的界面如下:

                               

                                                                                  (整体)

                                                  

                                                                            (局部放大)

1.拖入3个Chart控件并设置

分别是chart1,chart2,chart3,其中series代表的是一个图表的曲线。下面对chart1的ChartAreasSeries属性进行相应的设置

                                                  C# winform 多个chart动态曲线绘制(能局部放大)_第1张图片

①Series:  大部分的设置都在这,设置图标类型(样条曲线、散点、饼图...)、曲线数量、数据点标记样式、图例的名字等等

                                        C# winform 多个chart动态曲线绘制(能局部放大)_第2张图片

如果在ToolTips设置为如下,当鼠标点击图线时可以显示XY点的坐标:

"#VALX,#VALY"

②:ChartAreas : 主要对游标和坐标轴进行设置,

                                       C# winform 多个chart动态曲线绘制(能局部放大)_第3张图片         

游标设置:如果对游标中的XY同时进行设置可以进行局部放大,单独对X轴设置游标,只放大X轴

坐标轴设置:可以设置滚动条、网格线的颜色和格式

                                                 C# winform 多个chart动态曲线绘制(能局部放大)_第4张图片

 

2.代码展示

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.IO.Ports;          //使用串口
using System.Threading.Tasks;   //线程
using System.Runtime.InteropServices;

namespace Svpwm_Can
{
    public partial class Form1 : Form
    {

 
        /*线性列表用于图表显示*/
        private List List_ia  = new List();    //电流ia
        private List List_ic  = new List();    //电流ic
        private List List_udc = new List();    //母线电压dc
        private List List_vel = new List();    //速度

        Random random = new Random();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)   //界面初始化
        {
            
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            int num1 = random.Next(0, 99);   //随机数
            int num2 = random.Next(0, 99);
            int num3 = random.Next(0, 99);
            int num4 = random.Next(0, 99);

            List_ia.Add(num1);     ListRemove(List_ia);
            List_ic.Add(num2);     ListRemove(List_ic);
            List_udc.Add(num3);    ListRemove(List_udc);
            List_vel.Add(num4);    ListRemove(List_vel);

            DrawChart(List_ia, List_ic, List_udc, List_vel);
        }

      
        private void DrawChart(List List_ia, List List_ic, List List_udc, List List_vel)
        {
            chart1.Series[0].Points.Clear();    //清除所有点
            chart1.Series[1].Points.Clear();
            chart2.Series[0].Points.Clear();
            chart3.Series[0].Points.Clear();

            for (int i = 0; i < List_ia.Count; i++)
            {
                chart1.Series[0].Points.AddXY(i + 1, List_ia[i]);   //添加点
            }
            for (int i = 0; i < List_ic.Count; i++)
            {
                chart1.Series[1].Points.AddXY(i + 1, List_ic[i]);
            }
            for (int i = 0; i < List_udc.Count; i++)
            {
                chart2.Series[0].Points.AddXY(i + 1, List_udc[i]);
            }
            for (int i = 0; i < List_vel.Count; i++)
            {
                chart3.Series[0].Points.AddXY(i + 1, List_vel[i]);
            }
        }

        //清除所有的链表
        private void ClearAllList()
        {
            List_ia.Clear();
            List_ic.Clear();
            List_udc.Clear();
            List_vel.Clear();
        }



        //当大于80时移除list头部
        private void ListRemove(List list)
        {
            if (list.Count >= 80)
            {
                list.RemoveAt(0);
            }
        }

        private void button_start_Click(object sender, EventArgs e)
        {
            if (button_start.Text == "开始")
            {
                timer1.Start();
                button_start.Text = "暂停";
            }
            else
            {
                timer1.Stop();
                button_start.Text = "开始";
            }
        }
    }
}

 

你可能感兴趣的:(C#学习)