Laden...

nach symmetrischer Skalierung immer Nullpunkt auf Y-Achse anzeigen lassen

Erstellt von Toxo vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.677 Views
T
Toxo Themenstarter:in
64 Beiträge seit 2011
vor 9 Jahren
nach symmetrischer Skalierung immer Nullpunkt auf Y-Achse anzeigen lassen

Hallo,
Ich arbeite gerade an einem Bland Altmann Plot und zur besseren Visualisierung setze ich Anhand der Datenpunkte die maximalen und minimalen Werte auf der y-Achse so, dass diese symmetrisch sind.
Ein Bild der Darstellung ist angehängt.
jetzt habe ich das Problem, dass mir dabei die Darstellung des Nullpunktes auf der Y-Achse verloren geht. Gibt es Möglichkeiten bzw. Diagrammeigenschaften die dafür sorgen, dass der Nullpunkt immer eingezeichnet wird unabhängig von Maxima und Skalierung? Ich habe versucht mit IsStartFromZero=true zu arbeiten aber das lösts dieses Problem leider nicht.

Alternativ würde ich eine Series durch 0 zeichnen wenn das Chart selber da nichts anbietet. Ist jemand eine Lösung bekannt um dieses Problem direkt über die Diagrammeigenschaften zu lösen?

P
157 Beiträge seit 2010
vor 9 Jahren

Ist es notwendig, dass das Diagramm symetisch ist? Wenn du

chart1.ChartAreas[0].AxisY.Maximum = double.NaN;
chart1.ChartAreas[0].AxisY.Minimum = double.NaN;

lässt, sollte er eigentlich die Grenzen so wählen, dass eine 0 Achse zu sehen ist.

Alternativ kannst du auch einfach die


 chart1.ChartAreas[0].AxisY.Interval

Eigenschaft überschreiben.
Mit

chart1.ChartAreas[0].AxisY.Interval = (max-min) / i;

sollten (wenn max≥0 und min ≤0, max > min,|max|=|min| und i%2 = 0) eigentlich i+1 Datenlinien zu sehen sein, wobei eine durch den Ursprung geht. Da |max|=|min|, max≥0, min≤0 bei dir durch die symmetrie ja gegeben ist, max > min sowieso gegeben ist, sollte es eigentlich funktionieren. Vergiss nicht i%2=0, da du eine ungrade Anzahl von Linien benötigst und du eine Linie mehr hast als Intervalle.

P
157 Beiträge seit 2010
vor 9 Jahren

Ich hab jetzt ein bisschen getestet, um den Algorithmus für das Zeichnen offenzulegen. (Standarteinstellung). Er scheint bei mir immer von unten nach oben zu zeichnen, solltest du also mal keine Symmetrie haben, so muss gelten, dass:
Intervallgröße*n = -min, mit n ist eine Natürliche Zahl und min <0, max>0. Also wenn du

chart1.ChartAreas[0].AxisY.Interval =-min / i;

wählst mit i ist eine Natürliche Zahl.
Nur dann gibt i nicht die Anzahl der Itervalle an, sondern nur die Anzahl der Intervalle zwischen min und 0. Für eine bestimmte Anzahl an Intervalle müsstest du dann i in Abhängigkeit von max wählen.


int intervalCount = ...;
double max =..., min = ...;
double intervalSize = (max-min) / intervalCount;
i = Math.Max((int)Math.Round(-min/intervalSize),1);
chart1.ChartAreas[0].AxisY.Interval =-min / i;

Das haut zwar mit der Anzahl der Intervalle nicht immer genau hin, da i ja eine Natürliche Zahl sein muss, aber es liefert meiner Meinung dennoch ein ausreichendes Ergebnis (nur bei |min|<<|max|, min viel kleiner als max) führt es zu vielen Intervallen.