Synchronize Value

TeeChart VCL for Borland/CodeGear/Embarcadero RAD Studio, Delphi and C++ Builder.
Post Reply
MD
Newbie
Newbie
Posts: 4
Joined: Fri Nov 15, 2002 12:00 am
Location: France
Contact:

Synchronize Value

Post by MD » Tue May 11, 2004 2:57 pm

Hello

How know the other series values from the first serie with the same
reference X values ??
I hope obtain the synchronize value Y for one reference X

ex:
for i:=0 to Chart1.Series[0].Count-1 do begin
//retreive a X référence from fisrt serie
ValRefX:= Chart1.Series[0].Xvalue;
// calcul the position X
PosX := Chart1.Series[1].CalcXPosValue(ValRefX);
// try retreive value Y for other serie, but ????

Val1:= Chart1.Series[1].XScreenToValue(PosX);
Val2:= Chart1.Series[2].XScreenToValue(PosX);
etc but PB
How the good practice ??

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

Post by Pep » Tue May 11, 2004 3:44 pm

Hi,

I'm not sure if I understand what are you looking for. In case you want to know the YValue at certain XPosition you can use similar code to the following example (which shows the YValue of the Series moving the Mouse over the Chart) :

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
begin
Series1.FillSampleValues(100);
Series1.HorizAxis :=  aBothHorizAxis;
end;

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
var i, s, posi : integer;
begin;
  Chart1.Repaint;
  Chart1.Canvas.Brush.Style := bsClear;

  If Chart1.SeriesCount > 0 Then
  begin
   for s := 0 to Chart1.SeriesCount-1 do
   begin
    If Chart1.Series[s].Count > 0 Then begin
      For i := Chart1.Axes.Top.PosAxis To Chart1.Axes.Bottom.PosAxis do begin
        If Chart1.Series[s].Clicked(X, i) <> -1 Then posi := i;
      end;
      Chart1.Canvas.TextOut( 10, 10 + (10 * s), 'Series ' + inttostr(s) + ' Value: ' + floattostr(Chart1.Series[s].YScreenToValue(posi)));
    end;
   end;
  end;
  Chart1.Canvas.Pen.Color := clBlue;
  Chart1.Canvas.MoveTo (X, Chart1.Axes.Top.PosAxis);
  Chart1.Canvas.LineTo( X, Chart1.Axes.Bottom.PosAxis);
end;
end.

MD
Newbie
Newbie
Posts: 4
Joined: Fri Nov 15, 2002 12:00 am
Location: France
Contact:

Post by MD » Tue May 11, 2004 7:09 pm

My english is very Bad (speak french) :oops:
I try explain again.

I hope Obtain all value of the all series for
one value X (reference) , without click on chart but
with Serie[x].Xvalue

ex: for each Xvalue of the serie 1, how what Yvalue to correspond for all series ??



:?:

Marjan
Site Admin
Site Admin
Posts: 745
Joined: Fri Nov 07, 2003 5:00 am
Location: Slovenia
Contact:

Post by Marjan » Wed May 12, 2004 2:50 pm

Hi.

If other series have the same x value in their valuelist, you can use the Locate method. However, usually this is not the case i.e. series x values are not the same. This somewhat (but not that much) complicates the y y value for specific x value.

In case you're using line series you can use linear interpolation formula to calculate predicted y value at specific x coordinate. To construct interpolation formula you'll need two closest points to the current x value. This can be done by cycling through all visible points and remembering the closest point indices. Now you have two points (P1(x1,y1) and P2(x2,y2) which define the linear approximation:

y(x)-y1=(y2-y1)/(x2-x1)*(x-x1)

Note: formula above is valid only for x=[x1,x2] range. Now you can use your x value to calculate y(x) for specific series.
Marjan Slatinek,
http://www.steema.com

MD
Newbie
Newbie
Posts: 4
Joined: Fri Nov 15, 2002 12:00 am
Location: France
Contact:

Post by MD » Wed May 12, 2004 4:48 pm

Ok this the good response,

do have a code Delphi with example, please
for the speed practice.

And if in chart ago a TGanttSeries, i hope retreive
0 or 1 as value ???

And if in chart ago a TLineSeries, i hope retreive
Y value

Please, i don't all anderstand with linear function

Post Reply