Index: /trunk/sources/HeuristicLab.Visualization.Test/LineChartTests.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization.Test/LineChartTests.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization.Test/LineChartTests.cs	(revision 1462)
@@ -70,5 +70,5 @@
       f.ShowDialog();
     }
-
+      
     [Test]
     public void TestAxes() {
@@ -82,14 +82,17 @@
       YAxisDescriptor yaxis2 = new YAxisDescriptor();
 
+      model.XAxisLabel = "X Axis";
+      model.ShowXAxisLabel = true;
+
       yaxis1.Label = "Y-Axis 1";
+      yaxis1.ShowYAxisLabel = true;
+      yaxis1.Position = AxisPosition.Left;
+      yaxis1.ShowGrid = true;
+      yaxis1.GridColor = Color.Gray;
+
       yaxis2.Label = "Y-Axis 2";
-
-      yaxis1.Position = AxisPosition.Left;
+      yaxis2.ShowYAxisLabel = true;
       yaxis2.Position = AxisPosition.Right;
-
-      yaxis1.ShowGrid = true;
       yaxis2.ShowGrid = false;
-
-      yaxis1.GridColor = Color.Gray;
 
       row1.Color = Color.Red;
@@ -108,11 +111,8 @@
       row3.Label = "Die Blaue";
       row3.YAxis = yaxis2;
-      row3.YAxis.Label = "Die Blaue";
 
       model.AddDataRow(row1);
       model.AddDataRow(row2);
       model.AddDataRow(row3);
-
-      row1.YAxis.Label = "Rot und Grün";
 
       Random rand = new Random(42);
Index: /trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 1462)
@@ -15,5 +15,6 @@
   public class ChartDataRowsModel : ChartDataModelBase, IChartDataRowsModel{
     private string title = "Title";
-    //private string xAxisLabel;
+    private string xAxisLabel = "";
+    private bool showXAxisLabel = true;
     private ILabelProvider labelProvider = new ContinuousLabelProvider("0.##");
 
@@ -59,11 +60,20 @@
       }
     }
-    //public string XAxisLabel {
-    //  get { return xAxisLabel; }
-    //  set {
-    //    xAxisLabel = value;
-    //    OnModelChanged();
-    //  }
-    //}
+
+    public string XAxisLabel {
+      get { return xAxisLabel; }
+      set {
+        xAxisLabel = value;
+        OnModelChanged();
+      }
+    }
+
+    public bool ShowXAxisLabel {
+      get { return showXAxisLabel; }
+      set {
+        showXAxisLabel = value;
+        OnModelChanged();
+      }
+    }
 
     public override IView CreateView() {
Index: /trunk/sources/HeuristicLab.Visualization/IChartDataRowsModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/IChartDataRowsModel.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/IChartDataRowsModel.cs	(revision 1462)
@@ -19,4 +19,7 @@
     ViewSettings ViewSettings { get; set; }
 
+    string XAxisLabel { get; set; }
+    bool ShowXAxisLabel { get; set; }
+
     event ModelChangedHandler ModelChanged;
     event DataRowAddedHandler DataRowAdded;
Index: /trunk/sources/HeuristicLab.Visualization/LineChart.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/LineChart.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/LineChart.cs	(revision 1462)
@@ -27,5 +27,5 @@
 
     private const int YAxisWidth = 100;
-    private const int XAxisHeight = 20;
+    private const int XAxisHeight = 40;
 
     /// <summary>
@@ -95,4 +95,7 @@
       }
 
+      xAxis.ShowLabel = model.ShowXAxisLabel;
+      xAxis.Label = model.XAxisLabel;
+
       canvas.AddShape(xAxis);
 
@@ -104,4 +107,6 @@
         if (yAxisDescriptor.ShowYAxis) {
           canvas.AddShape(info.YAxis);
+          info.YAxis.ShowLabel = yAxisDescriptor.ShowYAxisLabel;
+          info.YAxis.Label = yAxisDescriptor.Label;
           info.YAxis.Position = yAxisDescriptor.Position;
           switch (yAxisDescriptor.Position) {
Index: /trunk/sources/HeuristicLab.Visualization/TextShape.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/TextShape.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/TextShape.cs	(revision 1462)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Drawing;
+using System.Drawing.Drawing2D;
 
 namespace HeuristicLab.Visualization {
@@ -19,4 +20,5 @@
     private double x;
     private double y;
+    private float rotation = 0;
 
     private AnchorPositionX anchorPositionX = AnchorPositionX.Left;
@@ -59,4 +61,9 @@
     }
 
+    public float Rotation {
+      get { return rotation; }
+      set { rotation = value; }
+    }
+
     public Color Color {
       get { return color; }
@@ -87,4 +94,5 @@
       int screenX = Transform.ToScreenX(x, Parent.Viewport, Parent.ClippingArea);
       int screenY = Transform.ToScreenY(y, Parent.Viewport, Parent.ClippingArea);
+      int offsetX, offsetY;
 
       SizeF size = graphics.MeasureString(text, font);
@@ -92,10 +100,11 @@
       switch (AnchorPositionX) {
         case AnchorPositionX.Left:
+          offsetX = 0;
           break;
         case AnchorPositionX.Middle:
-          screenX -= (int)(size.Width/2);
+          offsetX = -(int)(size.Width/2);
           break;
         case AnchorPositionX.Right:
-          screenX -= (int)size.Width;
+          offsetX = -(int)size.Width;
           break;
         default:
@@ -105,10 +114,11 @@
       switch (AnchorPositionY) {
         case AnchorPositionY.Top:
+          offsetY = 0;
           break;
         case AnchorPositionY.Middle:
-          screenY -= (int)(size.Height/2);
+          offsetY = -(int)(size.Height/2);
           break;
         case AnchorPositionY.Bottom:
-          screenY -= (int)size.Height;
+          offsetY = -(int)size.Height;
           break;
         default:
@@ -116,5 +126,9 @@
       }
 
-      graphics.DrawString(text, font, brush, screenX, screenY);
+      GraphicsState gstate = graphics.Save();
+      graphics.TranslateTransform(screenX, screenY, MatrixOrder.Append);
+      graphics.RotateTransform(rotation, MatrixOrder.Prepend);
+      graphics.DrawString(text, font, brush, offsetX, offsetY);
+      graphics.Restore(gstate);
     }
 
Index: /trunk/sources/HeuristicLab.Visualization/XAxis.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/XAxis.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/XAxis.cs	(revision 1462)
@@ -10,4 +10,6 @@
     private Color color = Color.Blue;
     private Font font = new Font("Arial", 8);
+    private bool showLabel = true;
+    private string label = "";
 
     public ILabelProvider LabelProvider {
@@ -22,8 +24,18 @@
                                               ClippingArea.Width,
                                               ClippingArea.X1)) {
-        TextShape label = new TextShape(x, ClippingArea.Height - 3,
+        TextShape tickLabel = new TextShape(x, ClippingArea.Height - 3,
                                         labelProvider.GetLabel(x), Font, Color);
+        tickLabel.AnchorPositionX = AnchorPositionX.Middle;
+        tickLabel.AnchorPositionY = AnchorPositionY.Top;
+        AddShape(tickLabel);
+      }
+
+      if (showLabel) {
+        TextShape label = new TextShape(ClippingArea.X1 + ClippingArea.Width/2,
+                                        ClippingArea.Y1 + 3,
+                                        this.label);
         label.AnchorPositionX = AnchorPositionX.Middle;
-        label.AnchorPositionY = AnchorPositionY.Top;
+        label.AnchorPositionY = AnchorPositionY.Bottom;
+
         AddShape(label);
       }
@@ -41,4 +53,14 @@
       set { font = value; }
     }
+
+    public bool ShowLabel {
+      get { return showLabel; }
+      set { showLabel = value; }
+    }
+
+    public string Label {
+      get { return label; }
+      set { label = value; }
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Visualization/YAxis.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/YAxis.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/YAxis.cs	(revision 1462)
@@ -10,4 +10,6 @@
     private ILabelProvider labelProvider = new ContinuousLabelProvider("e4");
     private AxisPosition position = AxisPosition.Left;
+    private bool showLabel = true;
+    private string label = "";
 
     public ILabelProvider LabelProvider {
@@ -19,4 +21,14 @@
       get { return position; }
       set { position = value; }
+    }
+
+    public bool ShowLabel {
+      get { return showLabel; }
+      set { showLabel = value; }
+    }
+
+    public string Label {
+      get { return label; }
+      set { label = value; }
     }
 
@@ -43,7 +55,33 @@
         }
         
-        TextShape label = new TextShape(x, y, labelProvider.GetLabel(y));
-        label.AnchorPositionX = anchorPositionX;
-        label.AnchorPositionY = AnchorPositionY.Middle;
+        TextShape tickLabel = new TextShape(x, y, labelProvider.GetLabel(y));
+        tickLabel.AnchorPositionX = anchorPositionX;
+        tickLabel.AnchorPositionY = AnchorPositionY.Middle;
+        AddShape(tickLabel);
+      }
+
+      if (showLabel) {
+        double x;
+        AnchorPositionY anchorPositionY;
+
+        switch (position) {
+          case AxisPosition.Left:
+            x = ClippingArea.X1 + 3;
+            anchorPositionY = AnchorPositionY.Top;
+            break;
+          case AxisPosition.Right:
+            x = ClippingArea.X2 - 3;
+            anchorPositionY = AnchorPositionY.Bottom;
+            break;
+          default:
+            throw new NotImplementedException();
+        }
+
+        TextShape label = new TextShape(x,
+                                        ClippingArea.Y1 + ClippingArea.Height/2,
+                                        this.label);
+        label.AnchorPositionX = AnchorPositionX.Middle;
+        label.AnchorPositionY = anchorPositionY;
+        label.Rotation = -90;
         AddShape(label);
       }
Index: /trunk/sources/HeuristicLab.Visualization/YAxisDescriptor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization/YAxisDescriptor.cs	(revision 1461)
+++ /trunk/sources/HeuristicLab.Visualization/YAxisDescriptor.cs	(revision 1462)
@@ -12,4 +12,5 @@
     private readonly List<IDataRow> dataRows = new List<IDataRow>();
     private bool showYAxis = true;
+    private bool showYAxisLabel = true;
     private string label = "";
     public bool clipChangeable = true;
@@ -35,4 +36,12 @@
       set {
         showYAxis = value;
+        OnYAxisDescriptorChanged();
+      }
+    }
+
+    public bool ShowYAxisLabel {
+      get { return showYAxisLabel; }
+      set {
+        showYAxisLabel = value;
         OnYAxisDescriptorChanged();
       }
