System.Windows.Forms.DataVisualization.Charting 命名空间
System.Windows.Forms.DataVisualization.Charting 命名空间包含用于图表 Windows 窗体控件的方法和属性。
使用.net 的Chart控件绘制曲线图
在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.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 #endregion
113
114 }
115 }