Chart绘图相关知识 
Chart控件,功能强大:可以绘制柱状图、折线图、波形图、饼状图,大大简化了对图的开发与定制。
 
Chart控件的相关概念: 
ChartArea: 表示图表区域,一个Chart可以绘制多个ChartArea,重叠在一起。 
Series: 表示数据序列,每个ChartArea可以有多个数据线。即,Series属于ChartArea. 
AxisX,AxisY: 表示主坐标轴,每一个ChartArea都有对应的坐标轴,包括主坐标轴,辅坐标轴 
Queue集合: 表示先进先出的集合。 
 
Queue主要有两个方法:     1. Dequeue() 表示移除并返回位于 System.Collections.Generic.Queue 开始处的对象。     2. Enqueue() 表示将对象添加到 System.Collections.Generic.Queue 的结尾处。  
其他用到知识:
 
Timer 定时器: 定时执行相应的功能,更新数据,刷新图表。
效果图 如下【先点击初始化按钮,再点击开始按钮】:
一、折线图【折线图,是取[0,100]之间的随即数进行填充】: 
 
二、波形图【波形图,是取正玄值,并放大50倍,然后上移50】 
 
核心代码 
实验错误经验:在窗体代码前要增加以下声明代码才能使用 ChartArea 这些类,ChartArea 完整名字为:  System.Windows.Forms.DataVisualization.Charting.ChartArea
 
1 using  System.Windows.Forms.DataVisualization.Charting;
 
完整源码: 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 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  RealChart ( )    {   InitializeComponent();   }                  private  void  btnInit_Click (object  sender, EventArgs e )    {   InitChart();   }                  private  void  btnStart_Click (object  sender, EventArgs e )    {   this .timer1.Start();   }                  private  void  btnStop_Click (object  sender, EventArgs e )    {   this .timer1.Stop();   }                  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));    }   }            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 = curValue % 360 ;            dataQueue.Enqueue((50 *Math.Sin(curValue*Math.PI / 180 ))+50 );      curValue=curValue+10 ;     }    }   }  } } 
 
备注 关于定时器Timer【微软自带的控件】:
说明:表示在相同的时间间隔,引发用户自定义的事情 。实现用户需要的功能。本例中是用来定时更新队列中的数据,并刷新图表。
常用说明: 
Interval 时间间隔,以毫秒为单位,本例是300毫秒。 
Tick 定时触发的事件,本例对应timer1_Tick事件方法。 
Start(),Stop() 表示定时器的启动和停止。Enabled 表示定时器是否启用,默认值为 false,需要手动设置为true。 
 
 
 
相关链接 
C# 绘制实时折线图,波形图  —>原文出处  
C# 实时折线图,波形图  
 
 
=================我是分割线=================  
欢迎到公众号来唠嗑: