Page 1 of 1

TChart alignment of multiple charts

Posted: Wed Dec 23, 2009 11:44 am
by 10054230
HI,
I have multiple charts positioned above each other and need to align both the left and right axes i.e. fix the width of all charts regardless of data present. Some charts have multiple axes i.e. labels on right, while others are simple charts with labels/ticks only on left axis.
The bottom axes is the same for all charts, TDateTime, and I want to be able to show a fixed time period e.g. 72hrs, regardless of whether there is data for that time. I have enclosed an image of the existing. To sum up:

1) How do I fix the widths for multiple charts
2) How do I fix the bottom axis data to display a fixed time period regardless of data present

I have searched for similar articles but could not find a great match. Please feel free to direct me to any existing articles if present.

Thanks & Merry Christmas,
D'Arcy

Re: TChart alignment of multiple charts

Posted: Wed Dec 23, 2009 5:12 pm
by yeray
Hi darcy,

1. Take a look at the following example that shows how you could set the margins to have two charts aligned:

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.FillSampleValues(100);
  Series2.FillSampleValues(200);
  Series1.VertAxis:=aBothVertAxis;

  LeftAlignCharts([Chart1,Chart2],100,600);

  Chart1.Draw;
  Chart2.Draw;

  RightAlignCharts([Chart1,Chart2],100);
end;

procedure TForm1.LeftAlignCharts(Const Charts: Array of TCustomChart; aLeft: Integer; aWidth: Integer);
var i: Integer;
begin
  for i := Low(Charts) to High(Charts) do
  With Charts[i] do
  begin
    Left := aLeft;
    MarginLeft := 0;
    Width := aWidth;
    Axes.Left.TitleSize := 15;
    Axes.Left.LabelsSize := 30;
    Axes.Left.LabelsAlign := alDefault;
  end;
end;

procedure TForm1.RightAlignCharts(Const Charts: Array of TCustomChart; aRight: Integer);
var i: Integer;
begin
  for i:=Low(Charts) to High(Charts) do
  With Charts[i] do
  begin
    MarginUnits:=muPixels;
    Legend.PositionUnits:=muPixels;
    Legend.Left:=530;
  end;

  if Charts[0].Axes.Bottom.IAxisSize < Charts[1].Axes.Bottom.IAxisSize then
  begin
    Charts[0].MarginRight:=aRight;
    Charts[1].MarginRight:=aRight+Charts[0].Axes.Right.MaxLabelsWidth+Charts[0].Axes.Right.TickLength;
  end
  else
  begin
    Charts[1].MarginRight:=aRight;
    Charts[0].MarginRight:=aRight+Charts[1].Axes.Right.MaxLabelsWidth+Charts[1].Axes.Right.TickLength;
  end;
end;
2. Have you tried with the axis Increment property?

Code: Select all

Chart2.Axes.Bottom.Increment:=50;

Re: TChart alignment of multiple charts

Posted: Wed Jan 13, 2010 12:24 pm
by 10054230
Hi Yeray,
Thanks for the reply.
1) I have been able to force the charts to be aligned correctly using CustomChartRect = true and defining the rect size relevant to the parent control. RESOLVED
2) I still am having issues forcing the charts to be fixed to a set time period for the x-axis e.g. 72hrs, despite the presence of data. The increment works fine but will not plot markers along the x-axis after the last data value. What I mean is if I add a dummy data point at the very last X-axis point it will behave as I want. I want the time increments to increase to 72hrs despite the presence of data.

I hope the above makes sense.

Thanks
D'Arcy.

Re: TChart alignment of multiple charts

Posted: Fri Jan 15, 2010 12:19 pm
by yeray
Hi D'Arcy,

Then I think that the only solution would be using custom labels like in the demo at All features/Welcome !/Axes/Labels/Custom Labels. You can clear all the labels from the bottom axis and add the labels you wish and with the text you want.

Re: TChart alignment of multiple charts

Posted: Fri May 20, 2011 12:15 am
by 16459366
I'm trying to do a similar thing. I have multiple charts which I want to align so the data along the x-axis is in the same position. I can set the left side no problem but because the right axis width varies I can't get an exact alignment.

I tried the above code but they don't seem to address this issue unless I missed something.

Is there any way of doing this?

Thanks
Mark
Chart1.jpg
Chart1.jpg (104.78 KiB) Viewed 15236 times

Re: TChart alignment of multiple charts

Posted: Fri May 20, 2011 2:02 am
by 16459366
I think I sorted it.

At design time it's down to setting the Axes/Label/Style size. In code you set the LabelsSize property.

By the way I'm really like the product. It's so flexible. Just so many features to learn! :D

Mark

Re: TChart alignment of multiple charts

Posted: Fri May 20, 2011 1:33 pm
by yeray
Hello Mark,

Have in mind that some properties (like axis MaxLabelsWidth) need the chart to be drawn to give a correct value.
Take a look at the tutorials, demos and the support forums, and don't hesitate to let us know any doubt you have with the component! :wink: