Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.Designer.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.Designer.cs	(revision 12881)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.Designer.cs	(revision 12882)
@@ -46,6 +46,6 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
       this.yLabel = new System.Windows.Forms.Label();
       this.xLabel = new System.Windows.Forms.Label();
@@ -66,4 +66,5 @@
       this.yJitterTrackBar = new System.Windows.Forms.TrackBar();
       this.xJitterTrackBar = new System.Windows.Forms.TrackBar();
+      this.noDataLabel = new System.Windows.Forms.Label();
       ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
       this.childrenGroupBox.SuspendLayout();
@@ -102,15 +103,15 @@
             | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      chartArea1.Name = "ChartArea1";
-      this.chart.ChartAreas.Add(chartArea1);
+      chartArea2.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea2);
       this.chart.Location = new System.Drawing.Point(3, 3);
       this.chart.Name = "chart";
-      series1.ChartArea = "ChartArea1";
-      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
-      series1.IsVisibleInLegend = false;
-      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
-      series1.Name = "Bubbles";
-      series1.YValuesPerPoint = 2;
-      this.chart.Series.Add(series1);
+      series2.ChartArea = "ChartArea1";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series2.IsVisibleInLegend = false;
+      series2.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle;
+      series2.Name = "Bubbles";
+      series2.YValuesPerPoint = 2;
+      this.chart.Series.Add(series2);
       this.chart.Size = new System.Drawing.Size(966, 668);
       this.chart.TabIndex = 7;
@@ -178,4 +179,5 @@
       // splitContainer.Panel2
       // 
+      this.splitContainer.Panel2.Controls.Add(this.noDataLabel);
       this.splitContainer.Panel2.Controls.Add(this.chart);
       this.splitContainer.Size = new System.Drawing.Size(1083, 674);
@@ -289,4 +291,15 @@
       this.xJitterTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
       this.xJitterTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // noDataLabel
+      // 
+      this.noDataLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.noDataLabel.AutoSize = true;
+      this.noDataLabel.Location = new System.Drawing.Point(469, 323);
+      this.noDataLabel.Name = "noDataLabel";
+      this.noDataLabel.Size = new System.Drawing.Size(139, 13);
+      this.noDataLabel.TabIndex = 8;
+      this.noDataLabel.Text = "No data could be displayed.";
+      this.noDataLabel.Visible = false;
       // 
       // BubbleChartView
@@ -317,4 +330,5 @@
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.Panel2.PerformLayout();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
       this.splitContainer.ResumeLayout(false);
@@ -348,4 +362,5 @@
     private System.Windows.Forms.TrackBar yJitterTrackBar;
     private System.Windows.Forms.TrackBar xJitterTrackBar;
+    private System.Windows.Forms.Label noDataLabel;
   }
 }
Index: /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs
===================================================================
--- /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs	(revision 12881)
+++ /branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs	(revision 12882)
@@ -197,16 +197,24 @@
       chart.ChartAreas[0].AxisY.IsMarginVisible = !(YAxisValue != null && YAxisValue.Contains(AxisDimension.Index.ToString()));
 
-      if (Content == null || string.IsNullOrEmpty(XAxisValue) || string.IsNullOrEmpty(YAxisValue)) return;
-
-      var xss = GetValues(XAxisValue);
-      var yss = GetValues(YAxisValue);
-
-      if (xss.Count == yss.Count) {
-        for (int i = 0; i < xss.Count; i++)
-          AddPoints(xss[i], yss[i], series);
-      } else if (xss.Count == 1 || yss.Count == 1) {
-        for (int i = 0; i < xss.Count; i++)
-          for (int j = 0; j < yss.Count; j++)
-            AddPoints(xss[i], yss[j], series);
+      if (Content != null && !string.IsNullOrEmpty(XAxisValue) && !string.IsNullOrEmpty(YAxisValue)) {
+        var xss = GetValues(XAxisValue);
+        var yss = GetValues(YAxisValue);
+
+        if (xss.Count == yss.Count) {
+          for (int i = 0; i < xss.Count; i++)
+            AddPoints(xss[i], yss[i], series);
+        } else if (xss.Count == 1 || yss.Count == 1) {
+          for (int i = 0; i < xss.Count; i++)
+            for (int j = 0; j < yss.Count; j++)
+              AddPoints(xss[i], yss[j], series);
+        }
+      }
+
+      if (chart.Series[0].Points.Count == 0) {
+        noDataLabel.Visible = true;
+      } else {
+        noDataLabel.Visible = false;
+        UpdateMarkerSizes();
+        UpdateCursorInterval();
       }
 
@@ -520,4 +528,43 @@
       }
     }
+    private void UpdateCursorInterval() {
+      double xMin = double.MaxValue;
+      double xMax = double.MinValue;
+      double yMin = double.MaxValue;
+      double yMax = double.MinValue;
+
+      foreach (var point in chart.Series[0].Points) {
+        if (point.IsEmpty) continue;
+        if (point.XValue < xMin) xMin = point.XValue;
+        if (point.XValue > xMax) xMax = point.XValue;
+        if (point.YValues[0] < yMin) yMin = point.YValues[0];
+        if (point.YValues[0] > yMax) yMax = point.YValues[0];
+      }
+
+      double xRange = 0.0;
+      double yRange = 0.0;
+      if (xMin != double.MaxValue && xMax != double.MinValue) xRange = xMax - xMin;
+      if (yMin != double.MaxValue && yMax != double.MinValue) yRange = yMax - yMin;
+
+      if (xRange.IsAlmost(0.0)) xRange = 1.0;
+      if (yRange.IsAlmost(0.0)) yRange = 1.0;
+      double xDigits = (int)Math.Log10(xRange) - 3;
+      double yDigits = (int)Math.Log10(yRange) - 3;
+      double xZoomInterval = Math.Pow(10, xDigits);
+      double yZoomInterval = Math.Pow(10, yDigits);
+      this.chart.ChartAreas[0].CursorX.Interval = xZoomInterval;
+      this.chart.ChartAreas[0].CursorY.Interval = yZoomInterval;
+
+      // TODO
+      //code to handle TimeSpanValues correct
+      //int axisDimensionCount = Enum.GetNames(typeof(AxisDimension)).Count();
+      //int columnIndex = xAxisComboBox.SelectedIndex - axisDimensionCount;
+      //if (columnIndex >= 0 && Content.GetValue(0, columnIndex) is TimeSpanValue)
+      //  this.chart.ChartAreas[0].CursorX.Interval = 1;
+      //columnIndex = yAxisComboBox.SelectedIndex - axisDimensionCount;
+      //if (columnIndex >= 0 && Content.GetValue(0, columnIndex) is TimeSpanValue)
+      //  this.chart.ChartAreas[0].CursorY.Interval = 1;
+    }
+
     #endregion
 
