Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/12/16 15:11:30 (8 years ago)
Author:
pfleck
Message:

#2597

  • Added a manual y-axis control.
  • Fixed bug with dragging the cursor in the GradientChart out of the chart.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.RegressionSolutionGradientView/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionSolutionTargetResponseGradientView.cs

    r13845 r13846  
    4343      InitializeComponent();
    4444      charts = new Dictionary<string, GradientChart>();
     45
     46      limitView.Content = new DoubleLimit(0, 1);
    4547    }
    4648
     
    5355      base.RegisterContentEvents();
    5456      variableListView.ItemChecked += variableListView_ItemChecked;
     57      limitView.Content.ValueChanged += limit_ValueChanged;
     58      automaticYAxisCheckBox.CheckedChanged += automaticYAxisCheckBox_CheckedChanged;
    5559    }
    5660
    5761    protected override void DeregisterContentEvents() {
    5862      variableListView.ItemChecked -= variableListView_ItemChecked;
     63      limitView.Content.ValueChanged -= limit_ValueChanged;
     64      automaticYAxisCheckBox.CheckedChanged -= automaticYAxisCheckBox_CheckedChanged;
    5965      base.DeregisterContentEvents();
    6066    }
     
    6470      if (Content == null) return;
    6571      var problemData = Content.ProblemData;
     72
     73      // Init Y-axis range
     74      double min = double.MaxValue, max = double.MinValue;
     75      var trainingTarget = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices);
     76      foreach (var t in trainingTarget) {
     77        if (t < min) min = t;
     78        if (t > max) max = t;
     79      }
     80      double range = max - min;
     81      const double scale = 1.0 / 3.0;
     82      double axisMin, axisMax, axisInterval;
     83      ChartUtil.CalculateAxisInterval(min - scale * range, max + scale * range, 5, out axisMin, out axisMax, out axisInterval);
     84      automaticYAxisCheckBox.Checked = false;
     85      limitView.ReadOnly = false;
     86      limitView.Content.Lower = axisMin;
     87      limitView.Content.Upper = axisMax;
     88
    6689      // create dataset
    6790      var allowedInputVariables = Content.ProblemData.AllowedInputVariables;
     
    87110
    88111          if (recalculations.All(t => t.IsCompleted))
    89             SyncYAxis();
     112            SetupYAxis();
    90113        };
    91114        gradientChart.Configure(new[] { Content }, sharedFixedVariables, variableName, Points);
     
    101124    }
    102125
    103     private void SyncYAxis() {
    104       double min = double.MaxValue, max = double.MinValue;
    105       foreach (var chart in VisibleCharts) {
    106         if (chart.YMin < min) min = chart.YMin;
    107         if (chart.YMax > max) max = chart.YMax;
    108       }
    109       double axisMin, axisMax, axisInterval;
    110       ChartUtil.CalculateAxisInterval(min, max, 5, out axisMin, out axisMax, out axisInterval);
     126    private void SetupYAxis() {
     127      double axisMin, axisMax;
     128      if (automaticYAxisCheckBox.Checked) {
     129        double min = double.MaxValue, max = double.MinValue;
     130        foreach (var chart in VisibleCharts) {
     131          if (chart.YMin < min) min = chart.YMin;
     132          if (chart.YMax > max) max = chart.YMax;
     133        }
     134
     135        double axisInterval;
     136        ChartUtil.CalculateAxisInterval(min, max, 5, out axisMin, out axisMax, out axisInterval);
     137      } else {
     138        axisMin = limitView.Content.Lower;
     139        axisMax = limitView.Content.Upper;
     140      }
    111141
    112142      foreach (var chart in VisibleCharts) {
     
    146176        tl.Controls.Remove(chart);
    147177      }
    148       SyncYAxis();
     178      SetupYAxis();
    149179
    150180      var count = tl.Controls.Count;
     
    163193      tl.ResumeLayout();
    164194    }
     195
     196    private void automaticYAxisCheckBox_CheckedChanged(object sender, EventArgs e) {
     197      limitView.ReadOnly = automaticYAxisCheckBox.Checked;
     198      SetupYAxis();
     199    }
     200
     201    private void limit_ValueChanged(object sender, EventArgs e) {
     202      if (automaticYAxisCheckBox.Checked)
     203        return;
     204      SetupYAxis();
     205    }
    165206  }
    166207}
Note: See TracChangeset for help on using the changeset viewer.