Настройка сетки графика по оси ординат

Previous  Top  Next

    
 

 

Code:

{ **** UBPFD *********** by kladovka.net.ru ****

>> Настройка оси

 

Настройка сетки графика по оси ординат. Имеет смысл при

передаче данных в другие пакеты, использующие графическое

представление данных (например, в Excel).

 

Зависимости: uses Chart, TeEngine, Math;

Автор:       lookin

Copyright:   lookin

Дата:        25 декабря 2002 г.

********************************************** }

 

//для использования в Delphi

procedure CalcAxis(NChart: TChart);

var step,ymx,ymn,rmx,rmn,raz: double;

   i,n,m,d: integer;

begin

with NChart do begin ymx:=-10000000000; ymn:=10000000000; m:=0; n:=0;

for i:=0 to SeriesCount-1 do if Series[i].XValues.Count<>0 then begin

if Series[i].YValues.MaxValue>ymx then ymx:=Series[i].YValues.MaxValue;

if Series[i].YValues.MinValue<ymn then ymn:=Series[i].YValues.MinValue; end;

rmx:=ymx; rmn:=ymn;

while ymn<0 do begin ymn:=ymn+100; ymx:=ymx+100; Inc(m); end; raz:=ymx-ymn;

while raz<100 do begin ymn:=ymn*10; ymx:=ymx*10; raz:=ymx-ymn; Inc(n); end;

ymx:=Ceil(ymx); ymn:=Floor(ymn);

d:=trunc(ymx) div 100; ymx:=(d+1)*100;

d:=trunc(ymn) div 100; ymn:=d*100; raz:=ymx-ymn; step:=raz/5;

ymx:=ymx/(Power(10,n))-m*100; ymn:=ymn/(Power(10,n))-m*100;

step:=step/(Power(10,n)); d:=0;

for i:=1 to 5 do if (d=0) and (ymn+step*i>rmx) then d:=i;

if d<>0 then ymx:=ymn+step*d; d:=0;

for i:=1 to 5 do if (d=0) and (ymn+step*i<rmn) then d:=i;

if d<>0 then ymn:=ymn+step*d;

with LeftAxis do begin Automatic:=false; Increment:=step;

Minimum:=-100000000000; Maximum:=ymx; Minimum:=ymn; end; end;

end;

 

 

//для использования в Excel в качестве макроса (Visual Basic)

Code:

Function SetAxisRange(CChart As Chart, ByRef AMax As Double, ByRef AMin As Double, ByRef AStep As Double)

 

Dim Step, RMax, RMin, Max, Min, Raz As Double

Dim I, J, N, M, d As Integer

 

   Max = -1000000

   Min = 1000000

   For I = 1 To CChart.SeriesCollection.Count

   ReDim VArray(UBound(CChart.SeriesCollection(I).Values))

   VArray = CChart.SeriesCollection(I).Values

   For J = 1 To UBound(VArray)

   If VArray(J) > Max Then Max = VArray(J)

   If VArray(J) < Min Then Min = VArray(J)

   Next J

   Next I

   RMax = Max

   RMin = Min

   N = 0

   M = 0

   If Max <> Min Then

   While Min < 0

   Min = Min + 100

   Max = Max + 100

   M = M + 1

   Wend

   Raz = Max - Min

   While Raz < 100

   Min = Min * 10

   Max = Max * 10

   Raz = Max - Min

   N = N + 1

   Wend

   Max = Int(Max) + 1

   Min = Int(Min)

   d = Max \ 100

   Max = (d + 1) * 100

   d = Min \ 100

   Min = d * 100

   Raz = Max - Min

   Step = Raz / 5

   AStep = Step / (10 ^ N)

   AMin = Min / (10 ^ N) - M * 100

   AMax = Max / (10 ^ N) - M * 100

   d = 0

   For I = 1 To 5

   If d = 0 Then

   If (AMin + AStep * I) > RMax Then d = I

   End If

   Next I

   If d <> 0 Then AMax = AMin + AStep * d

   d = 0

   For I = 1 To 5

   If d = 0 Then

   If (AMin + AStep * I) < RMin Then d = I

   End If

   Next I

   If d <> 0 Then AMin = AMin + AStep * d

   End If

 

End Function

 

 

 

©Drkb::04250