在進行軟件開發過程中我們可能會碰到需要生成圖表的情況,在.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 }