Autor Beitrag
HoddeX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 16.08.05 14:19 
Hallo,

ich habe einen Graph zu beschriften, und da die Werte stark schwankend sind, wollte ich eine dynamische Achsenskalierung einrichten. Über die Funktion "TextOut" lassen sich nur Texte unterbringen, ich müsste die Ausgabe jedoch immer errechnen lassen.
Gibt es eine Futnkion, die dieses zulässt?

MfG
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 17.08.05 07:07 
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.