xy-Chart: x-Achse skalieren

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von werna_werna.

    xy-Chart: x-Achse skalieren

    Hallo!

    Ich versuche aus meheren Messwerten eine Kurve zu zeichnen
    Für jeden Messwert werden die X-Koordinate und die Y-Koordinate über eine Textbox eingelesen.

    Das Problem ist, dass auf der X-Achse einfach die eingelsenen Werte nacheinander aufgetragen werden.
    Beispiel:

    P1(4/4), P2(2/1), P3(3/1), P4(2/2)



    Ich hätte aber gerne eine Skalierung ordentliche Skalierung (0,1,2,3....) und danach der Reihe nach alle Punkte eingetragen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Chart1.ChartAreas(0).AxisX.Title = xAchse.Text
    3. Chart1.ChartAreas(0).AxisY.Title = yAchse.Text
    4. Chart1.Titles("Title1").Text = Titel.Text
    5. Chart1.Series("Series1").Points.AddXY(x1.Text, y1.Text)
    6. Chart1.Series("Series1").Points.AddXY(x2.Text, y2.Text)
    7. Chart1.Series("Series1").Points.AddXY(x3.Text, y3.Text)
    8. Chart1.Series("Series1").Points.AddXY(x4.Text, y4.Text)
    9. End Sub

    Wie kann ich das realisieren? Gibt es eine Einstellung, welche ich übersehen habe ?
    Oder ist es mit dem Chart Typ "Spline" nicht möglich?
    Gibt es einen anderen, der sich eignet ?

    Danke im Vorraus
    Danke erstmal, bringt mich leider aber nicht wirklich weiter.
    Dann würden die Punkte in der richtigen Reihenfolge aufgetragen werden, ABER:

    Die Abstände wären jedesmal gleich.
    Beispiel:

    3,25,100 -> gleiche Abstände zwischen den Punkten

    Ich bräuchte in diesem Fall aber eine Skalierung wie:

    20,40,80,100. Danach sollen die Punkte eingetragen werden.
    Ist dir schon mal aufgefallen, dass die Punkte falsch eingezeichnet werden?

    Schau dir mal an welche Überladung du bei AddXY verwendest.

    Wie kann man nur auf die Idee kommen da Strings reinzustopfen :thumbdown:

    Setze .XValueType und .YValueType mal auf Double (falls das nicht der standardwert ist).

    @RushDen
    Bezogen auf die Position der Punkte: Das Sortieren sollte doch unnötig sein, wenn man die korrekten Datentypen verwendet...

    Hab zwar selber nicht so viel Ahnung, aber hier hab ich mal versucht das einigermaßen sauber hinzubekommen: link

    markus.obi schrieb:


    Ist dir schon mal aufgefallen, dass die Punkte falsch eingezeichnet werden?



    Setze .XValueType und .YValueType mal auf Double (falls das nicht der standardwert ist).



    Die Punkte werden doch richtig eingetragen !
    Und ja ich habe den Wert auf Double gestellt (Standard war Auto)

    Mein einziges Problem ist, dass nur die Y-Achse eine feste Skallierung hat.
    Auf der X-Achse werden die Punkte nur nacheinander aufgetragen, immer im gleichen Abstand.


    Ich bräuchte es in einem solchen Format, auch mit einer vernünftigen Skalierung auf der X-Achse.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „werna_werna“ ()

    Lerne genau zu lesen und versuche alles zu verstehen.

    Ich schrieb:

    Schau dir mal an welche Überladung du bei AddXY verwendest.
    Wie kann man nur auf die Idee kommen da Strings reinzustopfen.


    Du übergibst vermutlich String wenn ich richtig geraten habe, dass x1, y1 controls sind oder zumindest .Text String ist.
    Ein GUI Control ist kein Datenspeicher, vor allem ist eine .text property keine ZAHL.

    Gehe mit dem Mauszeiger über AddXY und du siehst, dass du irgendeine falsche Überladung nutzt: DataPointCollection.AddXY Method (Object, Object())
    Richtig wäre: DataPointCollection.AddXY Method (Double, Double)


    Das mit dem Zoom kannste erstmal stecken lassen, weil du erstmal begreifen musst was du da gerade machst.

    PS: ich rate einfach mal, dass du option strict on auch nicht benutzt.
    Gugst Du hier.

    VB.NET-Quellcode

    1. Me.Chart1.ChartAreas(0).AxisX.Maximum = maxX + deltaX
    2. Me.Chart1.ChartAreas(0).AxisX.Minimum = minX - deltaX
    3. Me.Chart1.ChartAreas(0).AxisY.Maximum = maxY + deltaY
    4. Me.Chart1.ChartAreas(0).AxisY.Minimum = minY - deltaY
    deltaX|Y ist der Rand.
    Wie soll es aussehen?
    Kannst Du ggf. mal die Daten posten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!