Probleme im Chart mit Annotationen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von tina83.

    Probleme im Chart mit Annotationen

    Hallo,

    ich möchte ein Chart zeichnen mit der Einheit m auf der x-Achse. Eine Serie einfügen und darstellen funktioniert. Das Problem liegt bei den Annotationen. Dazu habe ich zwar einen AnchorX, aber dieser von mir vorgegebene x-Wert stimmt nicht mit dem Ergebnis im Chart überein -> der senkrechte Strich (Annotation) ist woanders, aber nicht da wo er sein sollte. Kann mir einer sagen an was das liegt?

    Meinen Code bisher:

    VB.NET-Quellcode

    1. Dim series1, series2, series3 As New DataVisualization.Charting.Series()
    2. Chart1.Series.Add(series1)
    3. Chart1.Series.Add(series2)
    4. Chart1.Series.Add(series3)
    5. Chart1.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
    6. Chart1.Series(0).YAxisType = DataVisualization.Charting.AxisType.Primary
    7. Chart1.Series(0).Color = Color.Red
    8. Chart1.Series(0).BorderWidth = 2
    9. Chart1.Series(1).ChartType = DataVisualization.Charting.SeriesChartType.Line
    10. Chart1.Series(1).YAxisType = DataVisualization.Charting.AxisType.Primary
    11. Chart1.Series(1).Color = Color.Black
    12. Chart1.Series(1).BorderWidth = 2
    13. Chart1.Series(2).ChartType = DataVisualization.Charting.SeriesChartType.Line
    14. Chart1.Series(2).YAxisType = DataVisualization.Charting.AxisType.Secondary
    15. Chart1.Series(2).Color = Color.Blue
    16. Chart1.Series(2).BorderWidth = 2
    17. Chart1.ChartAreas(0).AxisY.Interval = 10
    18. Chart1.ChartAreas(0).AxisY2.Interval = 10
    19. 'Chart1.ChartAreas(0).AxisY.Title = "[mm]"
    20. 'Chart1.ChartAreas(0).AxisY2.Title = "[C°]"
    21. Chart1.ChartAreas(0).AxisX.Title = "[m]"
    22. Chart1.ChartAreas(0).AxisX.LabelStyle.Interval = 2
    23. Chart1.ChartAreas(0).AxisX.LabelStyle.Format = "{0:0.0}"
    24. Dim hla As New VerticalLineAnnotation()
    25. hla.AxisY = Chart1.ChartAreas(0).AxisX
    26. hla.AnchorX = Abstand_Antrieb(1) 'Soll: 30.42 m
    27. hla.IsInfinitive = True
    28. hla.ClipToChartArea = Chart1.ChartAreas(0).Name
    29. hla.LineColor = Color.Black
    30. Chart1.Annotations.Add(hla)
    31. Dim dfgh As New TextAnnotation
    32. dfgh.Text = "ZK"
    33. dfgh.AnchorX = Abstand_Antrieb(1) 'Soll: 30.42 m
    34. dfgh.AnchorY = 5
    35. dfgh.ForeColor = Color.Black
    36. dfgh.Alignment = ContentAlignment.MiddleCenter
    37. Chart1.Annotations.Add(dfgh)
    38. '.... Code zum befüllen der Serien:
    39. series1.Points.AddXY(Abstand_Messebene(j), Max_Ebene)



    Wo die Annotation dargestellt wird, hängt auch davon ab, ob die y-Achse einen Titel bekommt oder nicht. Siehe Bilder im Anhang.


    Ich hoffe ihr wisst an was das liegt.
    Grüße
    Bilder
    • Dia mit Titel.PNG

      18,03 kB, 899×403, 151 mal angesehen
    • Dia ohne Titel.PNG

      17,3 kB, 898×407, 151 mal angesehen
    @tina83 Ich habv mal ein wenig damit rumgespielt. Es sieht so aus, dass VerticalLineAnnotation seinen x-Wert von 0 bis 100 auf dem Chart-Hintergrund verteilt und nix von der Skalierung Deiner Daten weiß.
    Ersetz mal zum Test AnchorX durch einen dynamischen Wert:

    VB.NET-Quellcode

    1. hla.AnchorX = NumericUpDown1.Value

    Wenn Du eine skalierte Linie darstellen willst, nimm eine Series, die aus 2 Punkten besteht: x nach Deinem Wert, yMin und yMax.
    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!
    manchmal ist die Antwort so nah - man muss nur drauf kommen :)
    @RodFromGermany: du hast schon recht. Standardmäßig wissen die Annotationen nix von meiner x-Achse.
    ABER: man kanns auf die x-Achse beziehen mit folgender Zeile:

    VB.NET-Quellcode

    1. hla.AxisX = Chart1.ChartAreas(0).AxisX

    Das gleiche gibt's auf bei der Textannotation

    und somit rennt die Sache :thumbsup: