Ejemplo n.º 1
0
        protected void CalculateDensity(Series series, List <double> row, double bandwidth = double.NaN)
        {
            string densitySeriesName = "Density " + series.Name;
            double stepWidth         = series.Points[1].XValue - series.Points[0].XValue;
            var    rowArray          = row.ToArray();

            if (chart.Series.Any(x => x.Name == densitySeriesName))
            {
                var ds = chart.Series.Single(x => x.Name == densitySeriesName);
                chart.Series.Remove(ds);
            }

            if (double.IsNaN(bandwidth))
            {
                bandwidth = KernelDensityEstimator.EstimateBandwidth(rowArray);
                decimal bwDecimal = (decimal)bandwidth;
                if (bwDecimal < bandwidthMin)
                {
                    bwDecimal = bandwidthMin;
                    bandwidth = decimal.ToDouble(bwDecimal);
                }
                suppressUpdate = true;
                bandwidthNumericUpDown.Value = bwDecimal;
            }
            var density = KernelDensityEstimator.Density(rowArray, rowArray.Length, stepWidth, bandwidth);

            Series newSeries = new Series(densitySeriesName);

            newSeries.Color       = series.Color;
            newSeries.ChartType   = SeriesChartType.FastLine;
            newSeries.BorderWidth = 2;
            foreach (var d in density)
            {
                newSeries.Points.Add(new DataPoint(d.Item1, d.Item2));
            }

            // densities should be plotted on the second axis (different scale)
            newSeries.YAxisType = AxisType.Secondary;
            chart.Series.Add(newSeries);
        }