Ich habe es so gemacht:
Sei Min und Max der kleinste bzw. größte darzustellende Wert und Ticks die gewünschte Anzahl von Skalenstrichen.
1. Werte auf den Breich 0..1 normalisieren (Min-> Min' und Max->Max'), 10er Potenz merken (P10)
2. Für die vordefinierten Skalenstriche (0.05, 0.1, 0.2, 0.25, 0.5) berechnen, wie viele Skalenstriche in den Bereich [Min,Max] passen würden und den Skalenstrich nehmen, der am Nächsten an der gewünschten Anzahl 'Ticks' dranliegt. Skalenstrich = S
3. Min' auf das nächstkleinere Vielfache von S, Max' auf das nächstgrößere Vielfache von S runden.
4. Min', Max' und S mit P10 multiplizieren, fertig
Beispiel:
Sei Min = -350, Max = 570, Ticks = 6
Nach 1: Min' = -0.35 , Max' = 0.57 , P10 = 1000
Nach 2: 6*0.2 = 1.2, das ist am nächsten an (Max' - Min'). S = 0.2
Nach 3: Min' = -0.4 (weil nächstkleinere), Max' = 0.6
Nach 4: Min = Min'*1000 = -400, Max = Max'*1000 = 600
Also zeichnen wir eine Achse von -400 bis 600 mit strichen alle 200 Einheiten.
Zu 3 ist noch anzumerken, das es manchmal gewünscht ist, das Min bzw. MAx "wenn's geht" nicht verändert wird. Das ist z.B. bei Balkengrafiken sinnvoll, die auf jeden Fall bei 0 beginnen sollen. Dann muss die Bedingung 'nächstkleinere/nächstgrößere' auf 'nächstkleinere/größere oder Gleiches' erweitert werden.