Chart ist langsam

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Cistbesser.

    Chart ist langsam

    Moin,

    ich erstelle mittels Chart die untere Grafik. Links ist meins das so aussehen sollte wie das rechts daneben (welches mit Excel gemacht wurde). Die Koordinaten lade ich aus einem bzw 2 Arrays. Die Funktion dazu steht hier:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub drawPolkontur()
    2. Polkontur.Series.Clear()
    3. Polkontur.ChartAreas(0).AxisX.MajorGrid.LineColor = Color.LightGray
    4. Polkontur.ChartAreas(0).AxisY.MajorGrid.LineColor = Color.LightGray
    5. For i As Integer = 0 To 635 'Modul1.Xpol.Length - 1
    6. Polkontur.Series.Add(New Series("Plot " & i))
    7. Polkontur.Series(i).Points.AddXY(Xpol(i), Ypol(i))
    8. Polkontur.Series(i).Points.AddXY(Xpol(i + 1), Ypol(i + 1))
    9. Polkontur.Series(i).Color = Color.Black
    10. Polkontur.Series(i).BorderWidth = 2
    11. Polkontur.Series(i).ChartType = SeriesChartType.Line
    12. Polkontur.Update()
    13. Next
    14. End Sub


    Die Striche, die es zwischendrin gibt, werde ich wegbekommen, indem ich die entsprechenden Koordinaten nicht miteinander verbinden lasse, das ist klar. Mein eigentliches Problem besteht darin, dass der erste Quadrant noch recht zügig gezeichnet wird, dann aber immer langsamer wird. Das ganze Teil dauert 2min zu zeichnen, währenddessen ist das Programm logischerweise auch "eingefroren". Was kann ich dagegen machen?
    Ich habe mir überlegt, es im Hintergrund zeichnen zu lassen und einfach so lange eine Progressbar einzublenden. Sobald es fertig ist, verschwindet die Progressbar und das fertige Bild wird angezeigt. Allerdings ist das mehr behelfsmäßig wie ich finde.
    Bilder
    • Graph.jpg

      126 kB, 867×400, 173 mal angesehen

    Cistbesser schrieb:

    immer langsamer
    Die meiste Zeit verwendet das Chart, um gezeichnet zu werden. Je mehr linien da sind, um so länger dauert das.
    Mache das also deutlich seltener:

    VB.NET-Quellcode

    1. Private Sub drawPolkontur()
    2. Polkontur.Series.Clear()
    3. Polkontur.ChartAreas(0).AxisX.MajorGrid.LineColor = Color.LightGray
    4. Polkontur.ChartAreas(0).AxisY.MajorGrid.LineColor = Color.LightGray
    5. For i As Integer = 0 To 635 'Modul1.Xpol.Length - 1
    6. Polkontur.Series.Add(New Series("Plot " & i))
    7. Polkontur.Series(i).Points.AddXY(Xpol(i), Ypol(i))
    8. Polkontur.Series(i).Points.AddXY(Xpol(i + 1), Ypol(i + 1))
    9. Polkontur.Series(i).Color = Color.Black
    10. Polkontur.Series(i).BorderWidth = 2
    11. Polkontur.Series(i).ChartType = SeriesChartType.Line
    12. If i Mod 50 = 0 Then ' hier einen sinvollen Wert vorgeben
    13. Polkontur.Update()
    14. End If
    15. Next
    16. Polkontur.Update()
    17. End Sub
    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!
    ~2sec, Wahnsinn :D
    Dankeschön!

    Wenn du mir jetzt noch verraten kannst ob es eine Möglichkeit gibt, die Intervallbeschriftung auszublenden und nur den Maximalwert anzeigen zu lassen, bin ich glücklich.
    Also ich will nur die 70 sehen, nicht noch 42, 14, etc.

    Cistbesser schrieb:

    Intervallbeschriftung
    Was genau meinst Du?
    Poste mal ein Bild.
    -----
    Meinst Du dies:

    VB.NET-Quellcode

    1. Polkontur.Series(i).IsVisibleInLegend = False

    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!

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

    Ich meine die Achsenbeschriftung (siehe obiges Bild). Die Werte (14, 42, -14, -42) zwischendrin interessieren ja nicht. Ich möchte nur die Maximalwerte (70 und -70) sehen.

    VB.NET-Quellcode

    1. Polkontur.ChartAreas(0).AxisX.LabelStyle.Enabled = False
    2. Polkontur.ChartAreas(0).AxisX.LabelStyle.IsEndLabelVisible = True

    geht leider nicht. Da blendet er alles aus.

    Cistbesser schrieb:

    Ich möchte nur die Maximalwerte (70 und -70) sehen.
    Probier mal dies:

    VB.NET-Quellcode

    1. Polkontur.ChartAreas(0).AxisX.Maximum = 70
    2. Polkontur.ChartAreas(0).AxisX.Minimum = -70
    3. Polkontur.ChartAreas(0).AxisX.Interval = 140
    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!
    jo das geht, ist aber nicht das was ich wollte.
    Die Intervallstriche sollen noch da sein, aber die Beschriftung nicht. (Nur eben am Maximalwert)

    Edit: Zerbrich dir nicht den Kopf, ich mach die Beschriftung einfach kleiner und die Linien in einer anderen Farbe, dann sieht's sogar aus wie's Original. Da sollte es nichts zu meckern geben. ;)

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