StatisticFormula 類計算統計公式。
2、DataFormula.FinancialFormula 方法
運行時,執行數據操做。此類是經過chart中DataManipulator屬性對外公開的。html
在C#中的繼承關係以下:編程
System.Object 函數
System.Web.UI.DataVisualization.Charting.DataFormulaui
System.Web.UI.DataVisualization.Charting.DataManipulatorspa
《命名空間:System.Web.UI.DataVisualization.Charting》3d
《程序集:System.Web.DataVisualization(在 System.Web.DataVisualization.dll 中)》orm
在DataManipulator屬性中囊括了不少數學計算方法(大多都是針對圖表的數據序列展開的)如下是這樣一個列子:htm
double result = Chart1.DataManipulator.Statistics.Mean("Series1");平均值函數blog
double result = Chart1.DataManipulator.Statistics.Median("Series1");中值函數繼承
StatisticFormula 類計算統計公式。
2、DataFormula.FinancialFormula 方法
使用指定的參數從公式模塊調用方法。
重載此成員。有關此成員的完整信息(包括語法、用法和示例),請單擊重載列表中的相應名稱。
在這裏特別講到的是預測函數功能的實現狀況。
預測公式嘗試根據歷史數據找出擬合度最佳的迴歸函數,而後根據最擬合的函數預測最可能的將來數據值。
Chart.DataManipulator.FinancialFormula(
FinancialFormula.Forecasting,
"RegressionType,Period,ApproxError,ForecastError",
"Historical",
"Forecast,UpperError,LowerError")
三 預測函數的語法分析說明
此公式採用四個可選參數。
RegressionType
輸入值:
此公式採用一個輸入 Y 值。
Historical:用於預測的歷史數據。
輸出值:
此公式輸出三個 Y 值。
Forecast:預測測值。
UpperError:上限偏差。
下面的示例以 Series1 (Series1:Y) 做爲輸入,在 Series2 上輸出預測值 (Series2:Y),在 Series3 上輸出偏差範圍(Series3:Y、Series3:Y2)。該示例採用二次多元迴歸,預測期間爲 40 天。 Chart1.DataManipulator.FinancialFormula (FinancialFormula.Forecasting, "2,40,true,true", "Series1:Y", "Series2:Y,Series3:Y,Series3:Y2");
在編程的過程當中,注意原始歷史數據的輸入,要求X軸的間隔是必定的,不然影響數據的迴歸分析
四:如下是本身編寫的線性迴歸預測方法的一個公用類
using System.Drawing; using System.Windows.Forms.DataVisualization.Charting; using System; namespace WindowsFormsApplication8 { class RegressionModelClass { #region 字段 double[] sourceData_X = new double[4]; // 樣本數據 X 軸座標值 double[] sourceData_Y = new double[4]; // 樣本數據 Y 軸座標值 double[] predictData_Y = new double[8]; // 預測的將來數據的 Y 軸座標值 int n = 4; // 樣本數據的個數 // Chart System.Windows.Forms.DataVisualization.Charting.Chart chart_temp = new System.Windows.Forms.DataVisualization.Charting.Chart(); #endregion /// <summary> /// 構造函數 /// </summary> public RegressionModelClass(double[] data_x, double[] data_y) { for (int i = 0; i < n;i++) { sourceData_X[i] = data_x[i]; sourceData_Y[i] = data_y[i]; } InitialChart(chart_temp, sourceData_X, sourceData_Y); } // 初始化 Chart 控件 private void InitialChart(System.Windows.Forms.DataVisualization.Charting.Chart chart, double[] data_x, double[] data_y) { #region 1. Title 設置 Title title = new Title(); //* 實例化 title.Text = "信息預測"; //** 關聯 chart.Titles.Add(title); //* 當使用這種重載方式時,能夠將屬性傳遞 #endregion #region 2. ChartArea 設置 ChartArea chartarea1 = new ChartArea(); //* 實例化 chartarea1.Name = "chartarea1"; //* ChartArea 的惟一名稱 // 關聯 chart.ChartAreas.Add(chartarea1); //重要//使用這種重載方法 #endregion #region 3. 座標軸設置 #region 3.1 X軸 Axis axis_X = new Axis(); axis_X.IntervalType = DateTimeIntervalType.Days; axis_X.Title = "時 間"; //* 軸的標題 // ** 關聯 chart.ChartAreas[0].AxisX = axis_X; chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.True; #endregion #region 3.2.1 深度 -- Y 軸 Axis axisY_depth = new Axis(); axisY_depth.Title = "深度"; axisY_depth.LineColor = Color.Black; axisY_depth.ArrowStyle = AxisArrowStyle.None; axisY_depth.TextOrientation = TextOrientation.Stacked; axisY_depth.TitleFont = new Font("微軟雅黑", 14F, FontStyle.Bold); axisY_depth.TitleForeColor = Color.Black; axisY_depth.TitleAlignment = StringAlignment.Far; axisY_depth.IsLabelAutoFit = false; axisY_depth.IntervalType = DateTimeIntervalType.Number; axisY_depth.IsStartedFromZero = false; axisY_depth.Minimum = 0; axisY_depth.Maximum = 10; axisY_depth.IntervalAutoMode = IntervalAutoMode.FixedCount; axisY_depth.InterlacedColor = Color.Red; // ** 關聯 chart.ChartAreas[0].AxisY = axisY_depth; chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.True; #endregion #endregion #region 4. Series 設置 Series series = new Series(); series.Name = "樣本數據曲線"; series.ChartType = SeriesChartType.Line; series.XAxisType = AxisType.Primary; series.YAxisType = AxisType.Primary; // important series.XValueType = ChartValueType.DateTime; series.YValueType = ChartValueType.Double; series.Enabled = true; //關聯 series.ChartArea = chart.ChartAreas[0].Name; chart.Series.Clear(); chart.Series.Add(series); // 注意要使用這個重載方法,不該該使用 Add(string)重載方法 #endregion #region 5. Points 設置 // 清除全部數據點 chart.Series[0].Points.Clear(); // 添加數據點 int m = data_x.Length; for (int i = 0; i < m; i++) { chart.Series[0].Points.AddXY(data_x[i], data_y[i]); } #endregion } /// <summary> /// 獲得基於迴歸分析預測的數據 /// </summary> /// public double[] GetPredictData() { Series trendSeries = new Series(); trendSeries.Name = "trend"; trendSeries.ChartType = SeriesChartType.Line; // 關聯 trendSeries.ChartArea = chart_temp.ChartAreas[0].Name; chart_temp.Series.Add(trendSeries); string typeRegression = "2"; // The number of days for Forecasting (備註:該數字對應的單位與X軸的數據間隔單位有關,並不必定是「天」) string forecasting = "4"; string error = "false"; string forecastingError = "false"; string parameters = typeRegression + ',' + forecasting + ',' + error + ',' + forecastingError; chart_temp.DataManipulator.FinancialFormula(FinancialFormula.Forecasting, parameters, chart_temp.Series[0], chart_temp.Series["trend"]); for (int i = 0; i < 8; i++) // 共4個預測值 { predictData_Y[i] = Math.Round(chart_temp.Series["trend"].Points[i].YValues[0], 5); // chart.Series["trend"]共8個數據點 } return predictData_Y; } } }