Ich formuliere die Anforderung mal um. Der Maximalwert der Y-Achse soll abhängig vom Wertebereich der Y-Werte eine "schöne" Zahl sein. Ich vermute für Dich ist eine "schöne" Zahl: 1,2,3,5 bzw. 10,20,30,50 usw. Die Teilung der Y-Achse ergibt sich direkt aus dem Maximalwert.
1: 0,1/0,2/0,3/0,4/0,5/0,6/0,7/0,8/0,9/1,0
2: 0,2/../1,8/2,0
3: 1/2/3
5: 1/2/3/4/5
Oder so ähnlich. Das bleibt Dir überlassen.
Falls ich Dich da dann also richtig verstanden habe, geht es also lediglich darum den Maximalwert der Y-Werte in eine der vier Kategorien einzuordnen. Dazu würde ich Max(Y) zunächst normieren, also auf das Intervall [0..10[ herunter rechnen.
Delphi-Quellcode:
var
NPotenz: Integer;
YDiv: Double;
YResult: Double;
begin
NPotenz := trunc(Log10(YMax));
YDiv:= IntPower(10, NPotenz);
YNorm := trunc(YMax / YDiv);
end;
Jetzt mache ich die Fallunterscheidung für die "schöne" Zahl:
Delphi-Quellcode:
if YNorm<=3
then
YResult := YNorm
else
if YNorm<=5
then
YResult := 5
else
YResult := 10;
Und nun muss ich lediglich die korrekte Potenz wieder herstellen
YResult := YResult * YDiv;
Vielleicht gibt es jetzt noch irgendwelche Rundungsprobleme usw. Aber das soll hier ja auch nur einen möglichen Lösungsweg skizzieren und keine fertige Lösung sein.