Custom Axis Labelling

TeeChart for Microsoft Visual Studio .NET, Xamarin Studio (Android, iOS & Forms) & Monodevelop.
Post Reply
Paul
Newbie
Newbie
Posts: 18
Joined: Fri Jan 09, 2004 5:00 am

Custom Axis Labelling

Post by Paul » Fri Feb 06, 2004 4:06 pm

Hi,

I have a chart which is configured at runtime depending on the parameters chosen by the user. The values displayed can range from single digits into thousands. For example, for one series, values could range from 0 to 10, and for another from 0 to 10,000. This means that the axis labels vary significantly in width. When the axis labels are quite long it pushes the axis caption off the viewable space. I have to remedy this by setting the left margin of the chart panel. Is there anyway to adjust the left margin based on the (max) width of the axis labels? I could set the left margin to allow for the longest likely length but I'd prefer to make full use of the space available if possible. I'm using custom axis and the axis captions are already at 90 degrees.

Thanks,

Paul[/code]

Pep
Site Admin
Site Admin
Posts: 3295
Joined: Fri Nov 14, 2003 5:00 am
Contact:

Post by Pep » Mon Feb 09, 2004 6:16 pm

Hi Paul,

you can use code similar to the following to calculate axis width and then use the value to assign the left margin :

Code: Select all


Steema.TeeChart.Axis custom1 = new Steema.TeeChart.Axis(false, false, tChart1.Chart); 
      
      tChart1.Aspect.View3D = false; 
      tChart1.Axes.Custom.Add(custom1); 
      custom1.RelativePosition = 50; 
      line1.CustomVertAxis = custom1; 
      line1.FillSampleValues(150); 

      Bitmap bmp = tChart1.Bitmap; 

      int axisWidth = custom1.AxisPen.Width + custom1.Ticks.Length + custom1.MaxLabelsWidth(); 
      tChart1.Header.Text = axisWidth.ToString(); 
 

Paul
Newbie
Newbie
Posts: 18
Joined: Fri Jan 09, 2004 5:00 am

Post by Paul » Tue Feb 10, 2004 4:15 pm

Hi Pep,

Thanks for the reply. Unfortunately, the formula you gave does seem to work too well. The MaxLabelsWidth does not seem to give back the correct results. I plotted a graph with values ranging from 100 t0 1900 and MaxLabelsWidth returned 12. Then when I formatted the labels e.g. .Labels.ValueFormat = "0.00" it returned 27. I could not match either value with a corresponding area of the chart after examining the plot in an image editor.

Paul

Christopher
Site Admin
Site Admin
Posts: 1349
Joined: Thu Jan 01, 1970 12:00 am
Location: Riudellots de la Selva, Catalonia
Contact:

Post by Christopher » Wed Feb 11, 2004 4:14 pm

Hi Paul,

The problem you mention only seems to exist for custom axes -- for the default axes the behaviour is automatic, e.g.

Code: Select all

private void Form1_Load(object sender, System.EventArgs e) {
      Random rnd = new Random();
      double xVal, yVal;
      for(int i=0; i<10; ++i) {
        xVal = (double)i;
        yVal = rnd.Next(100);
        line1.Add(xVal, yVal);
      }

      tChart1.Axes.Left.Title.Caption = "Left Axis Caption";
      tChart1.Axes.Left.Title.Angle = 90;
    }


   private void button1_Click(object sender, System.EventArgs e) {
      Random rnd = new Random();
      double xVal, yVal;

      line1.XValues.Clear();
      line1.YValues.Clear();
      for(int i=0; i<10; ++i) {
        xVal = (double)i;
        yVal = rnd.Next(10000000);
        line1.Add(xVal, yVal);
      }
    }
Using custom axes, the following code seems to help the situation (MaxLabelsWidth works OK here):

Code: Select all

   private int labelWidth;

    private void Form1_Load(object sender, System.EventArgs e) {
      Random rnd = new Random();
      double xVal, yVal;
      for(int i=0; i<10; ++i) {
        xVal = (double)i;
        yVal = rnd.Next(100);
        line1.Add(xVal, yVal);
      }
      
      line1.CustomVertAxis = axis1;
      axis1.Title.Caption = "Left Axis Caption";
      axis1.Title.Angle = 90;

      tChart1.Panel.MarginLeft = 10;
      labelWidth = axis1.MaxLabelsWidth();
      label1.Text = labelWidth.ToString();
    }


    private void button1_Click(object sender, System.EventArgs e) {
      Random rnd = new Random();
      double xVal, yVal;

      line1.XValues.Clear();
      line1.YValues.Clear();
      for(int i=0; i<10; ++i) {
        xVal = (double)i;
        yVal = rnd.Next(10000000);
        line1.Add(xVal, yVal);
      }

      int newLabelWidth = axis1.MaxLabelsWidth();
      if(newLabelWidth > labelWidth) {
        int labelWidthDifference = newLabelWidth / labelWidth;
        tChart1.Panel.MarginLeft = tChart1.Panel.MarginLeft * labelWidthDifference;
      }
    }
Thank you!

Christopher Ireland (Steema crew)
Please be aware of the newsgroup archives:
http://www.teechart.net/support/search.php
http://groups.google.com
http://codenewsfast.com/

Paul
Newbie
Newbie
Posts: 18
Joined: Fri Jan 09, 2004 5:00 am

Post by Paul » Fri Feb 13, 2004 11:29 am

Hi Chris,

Thanks for the reply. I'll give it a go.

Post Reply