在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图、柱状图什么的了。废话不多说,直接附上代码,实现绘制曲线图,并能进行视图缩放,注释很多,相信一看就明白。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows.Forms; 6 using System.Windows.Forms.DataVisualization.Charting; 7 using System.Drawing; 8 9 namespace DrawGraph 10 { 11 /// <summary> 12 /// 绘制曲线类 13 /// </summary> 14 public static class DrawClass 15 { 16 #region 绘制曲线函数 17 /// <summary> 18 /// 绘制曲线函数 19 /// </summary> 20 /// <param name="listX">X值集合</param> 21 /// <param name="listY">Y值集合</param> 22 /// <param name="chart">Chart控件</param> 23 public static void DrawSpline(List<int> listX, List<double> listY, Chart chart) 24 { 25 try 26 { 27 //X、Y值成员 28 chart.Series[0].Points.DataBindXY(listX, listY); 29 chart.Series[0].Points.DataBindY(listY); 30 31 //点颜色 32 chart.Series[0].MarkerColor = Color.Green; 33 //图表类型 设置为样条图曲线 34 chart.Series[0].ChartType = SeriesChartType.Spline; 35 //设置点的大小 36 chart.Series[0].MarkerSize = 5; 37 //设置曲线的颜色 38 chart.Series[0].Color = Color.Orange; 39 //设置曲线宽度 40 chart.Series[0].BorderWidth = 2; 41 //chart.Series[0].CustomProperties = "PointWidth=4"; 42 //设置是否显示坐标标注 43 chart.Series[0].IsValueShownAsLabel = false; 44 45 //设置游标 46 chart.ChartAreas[0].CursorX.IsUserEnabled = true; 47 chart.ChartAreas[0].CursorX.AutoScroll = true; 48 chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; 49 //设置X轴是否可以缩放 50 chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true; 51 //将滚动条放到图表外 52 chart.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false; 53 // 设置滚动条的大小 54 chart.ChartAreas[0].AxisX.ScrollBar.Size = 15; 55 // 设置滚动条的按钮的风格,下面代码是将所有滚动条上的按钮都显示出来 56 chart.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All; 57 chart.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.SkyBlue; 58 // 设置自动放大与缩小的最小量 59 chart.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = double.NaN; 60 chart.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSize = 1; 61 //设置刻度间隔 62 chart.ChartAreas[0].AxisX.Interval = 10; 63 //将X轴上格网取消 64 chart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; 65 //X轴、Y轴标题 66 chart.ChartAreas[0].AxisX.Title = "环号"; 67 chart.ChartAreas[0].AxisY.Title = "直径"; 68 //设置Y轴范围 可以根据实际情况重新修改 69 double max = listY[0]; 70 double min = listY[0]; 71 foreach (var yValue in listY) 72 { 73 if (max < yValue) 74 { 75 max = yValue; 76 } 77 if (min > yValue) 78 { 79 min = yValue; 80 } 81 } 82 chart.ChartAreas[0].AxisY.Maximum = max; 83 chart.ChartAreas[0].AxisY.Minimum = min; 84 chart.ChartAreas[0].AxisY.Interval = (max - min) / 10; 85 //绑定数据源 86 chart.DataBind(); 87 } 88 catch (Exception exc) 89 { 90 MessageBox.Show(exc.ToString()); 91 } 92 } 93 #endregion 94 95 #region 鼠标点击,通过环号显示游标,并缩放到响应位置 96 /// <summary> 97 /// 鼠标点击,通过环号显示游标,并缩放到响应位置函数 98 /// </summary> 99 /// <param name="ringNum">环号</param>100 /// <param name="chart">Chart控件</param>101 public static void ShowCurByClick(int ringNum, Chart chart)102 {103 //设置游标位置104 chart.ChartAreas[0].CursorX.Position = ringNum;105 //设置视图缩放106 chart.ChartAreas[0].AxisX.ScaleView.Zoom(ringNum - 1, ringNum + 2);107 //改变曲线线宽108 chart.Series[0].BorderWidth = 3;109 //改变X轴刻度间隔110 chart.ChartAreas[0].AxisX.Interval = 1;111 } 112 #endregion113 114 }115 }