Index: /stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/FactorPartialDependencePlot.cs
===================================================================
--- /stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/FactorPartialDependencePlot.cs	(revision 15238)
+++ /stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/FactorPartialDependencePlot.cs	(revision 15239)
@@ -73,5 +73,5 @@
         if (value != yAxisTicks) {
           yAxisTicks = value;
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
           RecalculateInternalDataset();
         }
@@ -84,5 +84,5 @@
         if ((value.HasValue && fixedYAxisMin.HasValue && !value.Value.IsAlmost(fixedYAxisMin.Value)) || (value.HasValue != fixedYAxisMin.HasValue)) {
           fixedYAxisMin = value;
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
         }
       }
@@ -94,5 +94,5 @@
         if ((value.HasValue && fixedYAxisMax.HasValue && !value.Value.IsAlmost(fixedYAxisMax.Value)) || (value.HasValue != fixedYAxisMax.HasValue)) {
           fixedYAxisMax = value;
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
         }
       }
@@ -209,4 +209,5 @@
       try {
         var limits = await UpdateAllSeriesDataAsync(cancellationToken);
+        chart.Invalidate();
 
         yMin = limits.Lower;
@@ -214,5 +215,5 @@
         // Set y-axis
         if (resetYAxis)
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
 
         calculationPendingTimer.Stop();
@@ -220,5 +221,7 @@
         if (updateOnFinish)
           Update();
-      } catch (OperationCanceledException) { } catch (AggregateException ae) {
+      }
+      catch (OperationCanceledException) { }
+      catch (AggregateException ae) {
         if (!ae.InnerExceptions.Any(e => e is OperationCanceledException))
           throw;
@@ -235,18 +238,18 @@
     }
 
-    private void SetupAxis(Axis axis, double minValue, double maxValue, int ticks, double? fixedAxisMin, double? fixedAxisMax) {
-      if (minValue < maxValue) {
-        double axisMin, axisMax, axisInterval;
-        ChartUtil.CalculateAxisInterval(minValue, maxValue, ticks, out axisMin, out axisMax, out axisInterval);
-        axis.Minimum = fixedAxisMin ?? axisMin;
-        axis.Maximum = fixedAxisMax ?? axisMax;
-        axis.Interval = (axis.Maximum - axis.Minimum) / ticks;
-      }
-
-      try {
-        chart.ChartAreas[0].RecalculateAxesScale();
-      } catch (InvalidOperationException) {
-        // Can occur if eg. axis min == axis max
-      }
+    private static void SetupAxis(EnhancedChart chart, Axis axis, double minValue, double maxValue, int ticks, double? fixedAxisMin, double? fixedAxisMax) {
+      //guard if only one distinct value is present
+      if (minValue.IsAlmost(maxValue)) {
+        minValue = minValue - 0.5;
+        maxValue = minValue + 0.5;
+      }
+
+      double axisMin, axisMax, axisInterval;
+      ChartUtil.CalculateAxisInterval(minValue, maxValue, ticks, out axisMin, out axisMax, out axisInterval);
+      axis.Minimum = fixedAxisMin ?? axisMin;
+      axis.Maximum = fixedAxisMax ?? axisMax;
+      axis.Interval = (axis.Maximum - axis.Minimum) / ticks;
+
+      chart.ChartAreas[0].RecalculateAxesScale();
     }
 
@@ -343,5 +346,4 @@
           if (yvalues[i] > max) max = yvalues[i];
         }
-        chart.Invalidate();
 
         cancellationToken.ThrowIfCancellationRequested();
@@ -358,5 +360,4 @@
             if (upper > max) max = upper;
           }
-          chart.Invalidate();
         }
 
Index: /stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/PartialDependencePlot.cs
===================================================================
--- /stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/PartialDependencePlot.cs	(revision 15238)
+++ /stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/PartialDependencePlot.cs	(revision 15239)
@@ -82,5 +82,5 @@
         if (value != xAxisTicks) {
           xAxisTicks = value;
-          SetupAxis(chart.ChartAreas[0].AxisX, trainingMin, trainingMax, XAxisTicks, FixedXAxisMin, FixedXAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisX, trainingMin, trainingMax, XAxisTicks, FixedXAxisMin, FixedXAxisMax);
           RecalculateInternalDataset();
         }
@@ -93,13 +93,11 @@
         if ((value.HasValue && fixedXAxisMin.HasValue && !value.Value.IsAlmost(fixedXAxisMin.Value)) || (value.HasValue != fixedXAxisMin.HasValue)) {
           fixedXAxisMin = value;
-          if (trainingMin < trainingMax) {
-            SetupAxis(chart.ChartAreas[0].AxisX, trainingMin, trainingMax, XAxisTicks, FixedXAxisMin, FixedXAxisMax);
-            RecalculateInternalDataset();
-            // set the vertical line position 
-            if (VerticalLineAnnotation.X <= fixedXAxisMin) {
-              var axisX = chart.ChartAreas[0].AxisX;
-              var step = (axisX.Maximum - axisX.Minimum) / drawingSteps;
-              VerticalLineAnnotation.X = axisX.Minimum + step;
-            }
+          SetupAxis(chart, chart.ChartAreas[0].AxisX, trainingMin, trainingMax, XAxisTicks, FixedXAxisMin, FixedXAxisMax);
+          RecalculateInternalDataset();
+          // set the vertical line position 
+          if (VerticalLineAnnotation.X <= fixedXAxisMin) {
+            var axisX = chart.ChartAreas[0].AxisX;
+            var step = (axisX.Maximum - axisX.Minimum) / drawingSteps;
+            VerticalLineAnnotation.X = axisX.Minimum + step;
           }
         }
@@ -112,13 +110,11 @@
         if ((value.HasValue && fixedXAxisMax.HasValue && !value.Value.IsAlmost(fixedXAxisMax.Value)) || (value.HasValue != fixedXAxisMax.HasValue)) {
           fixedXAxisMax = value;
-          if (trainingMin < trainingMax) {
-            SetupAxis(chart.ChartAreas[0].AxisX, trainingMin, trainingMax, XAxisTicks, FixedXAxisMin, FixedXAxisMax);
-            RecalculateInternalDataset();
-            // set the vertical line position 
-            if (VerticalLineAnnotation.X >= fixedXAxisMax) {
-              var axisX = chart.ChartAreas[0].AxisX;
-              var step = (axisX.Maximum - axisX.Minimum) / drawingSteps;
-              VerticalLineAnnotation.X = axisX.Maximum - step;
-            }
+          SetupAxis(chart, chart.ChartAreas[0].AxisX, trainingMin, trainingMax, XAxisTicks, FixedXAxisMin, FixedXAxisMax);
+          RecalculateInternalDataset();
+          // set the vertical line position 
+          if (VerticalLineAnnotation.X >= fixedXAxisMax) {
+            var axisX = chart.ChartAreas[0].AxisX;
+            var step = (axisX.Maximum - axisX.Minimum) / drawingSteps;
+            VerticalLineAnnotation.X = axisX.Maximum - step;
           }
         }
@@ -132,5 +128,5 @@
         if (value != yAxisTicks) {
           yAxisTicks = value;
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
           RecalculateInternalDataset();
         }
@@ -143,5 +139,5 @@
         if ((value.HasValue && fixedYAxisMin.HasValue && !value.Value.IsAlmost(fixedYAxisMin.Value)) || (value.HasValue != fixedYAxisMin.HasValue)) {
           fixedYAxisMin = value;
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
         }
       }
@@ -153,11 +149,11 @@
         if ((value.HasValue && fixedYAxisMax.HasValue && !value.Value.IsAlmost(fixedYAxisMax.Value)) || (value.HasValue != fixedYAxisMax.HasValue)) {
           fixedYAxisMax = value;
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
-        }
-      }
-    }
-
-    private double trainingMin = 1;
-    private double trainingMax = -1;
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+        }
+      }
+    }
+
+    private double trainingMin = -1;
+    private double trainingMax = 1;
 
     private int drawingSteps = 1000;
@@ -293,5 +289,5 @@
       if (IsDisposed
         || sharedFixedVariables == null || !solutions.Any() || string.IsNullOrEmpty(freeVariable)
-        || trainingMin.IsAlmost(trainingMax) || trainingMin > trainingMax || drawingSteps == 0)
+        || trainingMin > trainingMax || drawingSteps == 0)
         return;
 
@@ -307,4 +303,5 @@
       try {
         var limits = await UpdateAllSeriesDataAsync(cancellationToken);
+        chart.Invalidate();
 
         yMin = limits.Lower;
@@ -312,5 +309,5 @@
         // Set y-axis
         if (resetYAxis)
-          SetupAxis(chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
+          SetupAxis(chart, chart.ChartAreas[0].AxisY, yMin, yMax, YAxisTicks, FixedYAxisMin, FixedYAxisMax);
 
         UpdateOutOfTrainingRangeStripLines();
@@ -320,5 +317,7 @@
         if (updateOnFinish)
           Update();
-      } catch (OperationCanceledException) { } catch (AggregateException ae) {
+      }
+      catch (OperationCanceledException) { }
+      catch (AggregateException ae) {
         if (!ae.InnerExceptions.Any(e => e is OperationCanceledException))
           throw;
@@ -335,18 +334,18 @@
     }
 
-    private void SetupAxis(Axis axis, double minValue, double maxValue, int ticks, double? fixedAxisMin, double? fixedAxisMax) {
-      if (minValue < maxValue) {
-        double axisMin, axisMax, axisInterval;
-        ChartUtil.CalculateAxisInterval(minValue, maxValue, ticks, out axisMin, out axisMax, out axisInterval);
-        axis.Minimum = fixedAxisMin ?? axisMin;
-        axis.Maximum = fixedAxisMax ?? axisMax;
-        axis.Interval = (axis.Maximum - axis.Minimum) / ticks;
-      }
-
-      try {
-        chart.ChartAreas[0].RecalculateAxesScale();
-      } catch (InvalidOperationException) {
-        // Can occur if eg. axis min == axis max
-      }
+    private static void SetupAxis(EnhancedChart chart, Axis axis, double minValue, double maxValue, int ticks, double? fixedAxisMin, double? fixedAxisMax) {
+      //guard if only one distinct value is present
+      if (minValue.IsAlmost(maxValue)) {
+        minValue = minValue - 0.5;
+        maxValue = minValue + 0.5;
+      }
+
+      double axisMin, axisMax, axisInterval;
+      ChartUtil.CalculateAxisInterval(minValue, maxValue, ticks, out axisMin, out axisMax, out axisInterval);
+      axis.Minimum = fixedAxisMin ?? axisMin;
+      axis.Maximum = fixedAxisMax ?? axisMax;
+      axis.Interval = (axis.Maximum - axis.Minimum) / ticks;
+
+      chart.ChartAreas[0].RecalculateAxesScale();
     }
 
@@ -357,5 +356,10 @@
       if (initializeAxisRanges) {
         double xmin, xmax, xinterval;
-        ChartUtil.CalculateAxisInterval(trainingMin, trainingMax, XAxisTicks, out xmin, out xmax, out xinterval);
+        //guard if only one distinct value is present
+        if (trainingMin.IsAlmost(trainingMax))
+          ChartUtil.CalculateAxisInterval(trainingMin - 0.5, trainingMax + 0.5, XAxisTicks, out xmin, out xmax, out xinterval);
+        else
+          ChartUtil.CalculateAxisInterval(trainingMin, trainingMax, XAxisTicks, out xmin, out xmax, out xinterval);
+
         FixedXAxisMin = xmin;
         FixedXAxisMax = xmax;
@@ -369,5 +373,9 @@
       // we expand the range in order to get nice tick intervals on the x axis
       double xmin, xmax, xinterval;
-      ChartUtil.CalculateAxisInterval(trainingMin, trainingMax, XAxisTicks, out xmin, out xmax, out xinterval);
+      //guard if only one distinct value is present
+      if (trainingMin.IsAlmost(trainingMax))
+        ChartUtil.CalculateAxisInterval(trainingMin - 0.5, trainingMin + 0.5, XAxisTicks, out xmin, out xmax, out xinterval);
+      else
+        ChartUtil.CalculateAxisInterval(trainingMin, trainingMax, XAxisTicks, out xmin, out xmax, out xinterval);
 
       if (FixedXAxisMin.HasValue) xmin = FixedXAxisMin.Value;
@@ -470,5 +478,4 @@
           if (yvalues[i] > max) max = yvalues[i];
         }
-        chart.Invalidate();
 
         cancellationToken.ThrowIfCancellationRequested();
@@ -485,5 +492,4 @@
             if (upper > max) max = upper;
           }
-          chart.Invalidate();
         }
 
