Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
nach symmetrischer Skalierung immer Nullpunkt auf Y-Achse anzeigen lassen
Toxo
myCSharp.de - Member



Dabei seit:
Beiträge: 64

Themenstarter:

nach symmetrischer Skalierung immer Nullpunkt auf Y-Achse anzeigen lassen

beantworten | zitieren | melden

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?
Attachments
private Nachricht | Beiträge des Benutzers
PPK
myCSharp.de - Member



Dabei seit:
Beiträge: 157

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von PPK am .
private Nachricht | Beiträge des Benutzers
PPK
myCSharp.de - Member



Dabei seit:
Beiträge: 157

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers