Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/24/15 11:17:08 (9 years ago)
Author:
mkommend
Message:

#2276: Merged trunk changes into dataset refactoring branch.

Location:
branches/HeuristicLab.DatasetRefactor/sources
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.DatasetRefactor/sources

  • branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Analysis.Views

  • branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs

    r12031 r12247  
    5555      this.label1 = new System.Windows.Forms.Label();
    5656      this.exactCheckBox = new System.Windows.Forms.CheckBox();
     57      this.label2 = new System.Windows.Forms.Label();
     58      this.bandwidthNumericUpDown = new System.Windows.Forms.NumericUpDown();
    5759      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
    5860      ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).BeginInit();
     61      ((System.ComponentModel.ISupportInitialize)(this.bandwidthNumericUpDown)).BeginInit();
    5962      this.SuspendLayout();
    6063      //
    6164      // chart
    6265      //
    63       this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    64             | System.Windows.Forms.AnchorStyles.Left)
     66      this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
     67            | System.Windows.Forms.AnchorStyles.Left) 
    6568            | System.Windows.Forms.AnchorStyles.Right)));
    6669      chartArea1.Name = "ChartArea1";
     
    8891            0});
    8992      this.binsNumericUpDown.Minimum = new decimal(new int[] {
    90             1,
     93            2,
    9194            0,
    9295            0,
     
    115118      this.exactCheckBox.AutoSize = true;
    116119      this.exactCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
    117       this.exactCheckBox.Location = new System.Drawing.Point(158, 4);
     120      this.exactCheckBox.Location = new System.Drawing.Point(291, 4);
    118121      this.exactCheckBox.Name = "exactCheckBox";
    119122      this.exactCheckBox.Size = new System.Drawing.Size(56, 17);
     
    123126      this.exactCheckBox.CheckedChanged += new System.EventHandler(this.exactCheckBox_CheckedChanged);
    124127      //
     128      // label2
     129      //
     130      this.label2.AutoSize = true;
     131      this.label2.Location = new System.Drawing.Point(158, 5);
     132      this.label2.Name = "label2";
     133      this.label2.Size = new System.Drawing.Size(60, 13);
     134      this.label2.TabIndex = 5;
     135      this.label2.Text = "Bandwidth:";
     136      //
     137      // bandwidthNumericUpDown
     138      //
     139      this.bandwidthNumericUpDown.DecimalPlaces = 2;
     140      this.bandwidthNumericUpDown.Location = new System.Drawing.Point(224, 3);
     141      this.bandwidthNumericUpDown.Maximum = new decimal(new int[] {
     142            100000000,
     143            0,
     144            0,
     145            0});
     146      this.bandwidthNumericUpDown.Minimum = new decimal(new int[] {
     147            1,
     148            0,
     149            0,
     150            851968});
     151      this.bandwidthNumericUpDown.Name = "bandwidthNumericUpDown";
     152      this.bandwidthNumericUpDown.Size = new System.Drawing.Size(61, 20);
     153      this.bandwidthNumericUpDown.TabIndex = 4;
     154      this.bandwidthNumericUpDown.Value = new decimal(new int[] {
     155            1,
     156            0,
     157            0,
     158            0});
     159      this.bandwidthNumericUpDown.ValueChanged += new System.EventHandler(this.bandwidthNumericUpDown_ValueChanged);
     160      //
    125161      // HistogramControl
    126162      //
    127163      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
     164      this.Controls.Add(this.label2);
     165      this.Controls.Add(this.bandwidthNumericUpDown);
    128166      this.Controls.Add(this.exactCheckBox);
    129167      this.Controls.Add(this.label1);
     
    134172      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
    135173      ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).EndInit();
     174      ((System.ComponentModel.ISupportInitialize)(this.bandwidthNumericUpDown)).EndInit();
    136175      this.ResumeLayout(false);
    137176      this.PerformLayout();
     
    145184    private System.Windows.Forms.Label label1;
    146185    private System.Windows.Forms.CheckBox exactCheckBox;
     186    private System.Windows.Forms.Label label2;
     187    private System.Windows.Forms.NumericUpDown bandwidthNumericUpDown;
    147188  }
    148189}
  • branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs

    r12031 r12247  
    3131  public partial class HistogramControl : UserControl {
    3232    protected static readonly string SeriesName = "Histogram";
    33 
     33    protected static readonly decimal bandwidthMin = 0.0000000000001m;
    3434    protected Dictionary<string, List<double>> points;
     35    protected bool suppressUpdate;
     36
    3537    public int NumberOfBins {
    3638      get { return (int)binsNumericUpDown.Value; }
     
    123125    }
    124126
    125     protected void UpdateHistogram() {
     127    protected void UpdateHistogram(double bandwith = double.NaN) {
    126128      if (InvokeRequired) {
    127         Invoke((Action)UpdateHistogram, null);
     129        Invoke((Action<double>)UpdateHistogram, bandwith);
    128130        return;
    129131      }
     
    134136
    135137      chart.Series.Clear();
    136 
    137138      foreach (var point in points) {
    138139        if (!point.Value.Any()) continue;
     
    140141        Series histogramSeries = new Series(point.Key);
    141142        chart.Series.Add(histogramSeries);
    142 
    143143        double minValue = point.Value.Min();
    144144        double maxValue = point.Value.Max();
     
    165165        histogramSeries["PointWidth"] = "1";
    166166
    167         CalculateDensity(histogramSeries, point.Value);
    168 
    169167        overallMax = Math.Max(overallMax, maxValue);
    170168        overallMin = Math.Min(overallMin, minValue);
     169
     170        chart.ApplyPaletteColors();
     171        CalculateDensity(histogramSeries, point.Value, bandwith);
    171172      }
    172173
    173174      ChartArea chartArea = chart.ChartAreas[0];
     175      // don't show grid lines for second y-axis
     176      chartArea.AxisY2.MajorGrid.Enabled = false;
     177      chartArea.AxisY2.MinorGrid.Enabled = false;
    174178      chartArea.AxisY.Title = "Frequency";
    175179
     
    182186    }
    183187
    184     protected void CalculateDensity(Series series, List<double> row) {
     188    protected void CalculateDensity(Series series, List<double> row, double bandwidth = double.NaN) {
    185189      string densitySeriesName = "Density " + series.Name;
    186190      double stepWidth = series.Points[1].XValue - series.Points[0].XValue;
     191      var rowArray = row.ToArray();
    187192
    188193      if (chart.Series.Any(x => x.Name == densitySeriesName)) {
     
    191196      }
    192197
    193       var density = NormalDistribution.Density(row.ToArray(), row.Count, stepWidth);
     198      if (double.IsNaN(bandwidth)) {
     199        bandwidth = KernelDensityEstimator.EstimateBandwidth(rowArray);
     200        decimal bwDecimal = (decimal)bandwidth;
     201        if (bwDecimal < bandwidthMin) {
     202          bwDecimal = bandwidthMin;
     203          bandwidth = decimal.ToDouble(bwDecimal);
     204        }
     205        suppressUpdate = true;
     206        bandwidthNumericUpDown.Value = bwDecimal;
     207      }
     208      var density = KernelDensityEstimator.Density(rowArray, rowArray.Length, stepWidth, bandwidth);
    194209
    195210      Series newSeries = new Series(densitySeriesName);
     211      newSeries.Color = series.Color;
    196212      newSeries.ChartType = SeriesChartType.FastLine;
    197213      newSeries.BorderWidth = 2;
     
    200216      }
    201217
     218      // densities should be plotted on the second axis (different scale)
     219      newSeries.YAxisType = AxisType.Secondary;
    202220      chart.Series.Add(newSeries);
    203221    }
     
    221239      UpdateHistogram();
    222240    }
     241
     242    private void bandwidthNumericUpDown_ValueChanged(object sender, EventArgs e) {
     243      if (!suppressUpdate) {
     244        UpdateHistogram(decimal.ToDouble(bandwidthNumericUpDown.Value));
     245      }
     246      suppressUpdate = false;
     247    }
    223248  }
    224249}
Note: See TracChangeset for help on using the changeset viewer.