vb.net chart AxisX nur bestimmte Labels anzeigen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von JTrum.

    vb.net chart AxisX nur bestimmte Labels anzeigen

    Hallo Leute,

    irgendwie kriege ich es nicht hin. In einem Chart werden auf der Y-Achse Zahlenwerte angezeigt, auf der X-Achse der Zeitraum, für die Anzeige der Zahlenwerte in Kalenderwochen. Das klappt soweit so gut. Hier ein Bild dazu (Bild hochladen scheint nicht zu funktionieren).
    spearhead-home.com/Downloads/20220509_XAchseKWs.jpg
    Im Bild ist zu sehen, dass vom Anfang bis zur aktuellen Woche (Bild von letzter Woche) nicht alle Labels angezeigt werden, danach für jede Woche. Warum das so ist??? Ich weiß es nicht. Ich würde gern die Labels durch CustomLabels selbst setzen, kriege aber nur die Intervalschritte auf der X-Achse angezeigt und nicht die Labels. Was mache ich falsch?

    Hier Quellcode dazu:

    VB.NET-Quellcode

    1. dim ints as integer = CInt(DateDiff(DateInterval.WeekOfYear, von_X, bis_X, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFullWeek))
    2. Dim xdate(ints) As Date 'wird in einer Schleife durchlaufen und das Datum der jeweiligen Woche hinzugefügt.
    3. newchart(chart1)'falls vorhanden, wird hier alles gecleared
    4. Dim chartArea1 As New ChartArea("Default")
    5. chart1.ChartAreas.Add(chartArea1)
    6. chart1.ChartAreas("Default").CursorX.IsUserEnabled = False
    7. chart1.ChartAreas("Default").CursorX.IsUserSelectionEnabled = False
    8. chart1.ChartAreas("Default").BackGradientStyle = GradientStyle.None
    9. chart1.ChartAreas("Default").Position.Auto = False
    10. chart1.ChartAreas("Default").Position.X = 0
    11. chart1.ChartAreas("Default").Position.Y = 10
    12. chart1.ChartAreas("Default").Position.Width = ChartAreasWidth
    13. chart1.ChartAreas("Default").Position.Height = ChartAreasHeight - 4
    14. chart1.ChartAreas("Default").AxisX.ScaleView.Zoomable = True
    15. chart1.ChartAreas("Default").AxisX.ScrollBar.IsPositionedInside = True
    16. chart1.ChartAreas("Default").AxisX.MajorGrid.Enabled = False
    17. chart1.ChartAreas("Default").AxisX.MajorGrid.LineWidth = 1
    18. chart1.ChartAreas("Default").AxisX.IntervalType = DateTimeIntervalType.Weeks
    19. chart1.ChartAreas("Default").AxisX.Interval = 1
    20. chart1.ChartAreas("Default").AxisX.LabelAutoFitStyle = LabelAutoFitStyles.DecreaseFont
    21. chart1.ChartAreas("Default").AxisX.LabelAutoFitMinFontSize = 7
    22. chart1.ChartAreas("Default").AxisX.LabelStyle.Font = My.Settings.fontbold8
    23. chart1.ChartAreas("Default").AxisX.LabelStyle.Angle = 90
    24. chart1.ChartAreas("Default").AxisX.MajorTickMark.Enabled = True
    25. chart1.ChartAreas("Default").AxisX.MinorTickMark.Enabled = False
    26. chart1.ChartAreas("Default").AxisX.Minimum = von_X.ToOADate()
    27. chart1.ChartAreas("Default").AxisX.Maximum = bis_X.ToOADate()
    28. chart1.ChartAreas("Default").AxisX.IsMarginVisible = False
    29. Dim wertFormat As String = "###,##0 €"
    30. Dim culture As New System.Globalization.CultureInfo("de-DE")
    31. chart1.Series.Add("K").Color = ColorTranslator.FromHtml("#297AB7") 'MattBlau colorx(0)
    32. chart1.Series("K").Points.DataBindXY(xdate, yValues)
    33. chart1.Series("K").ChartType = SeriesChartType.StackedColumn
    34. chart1.Series("K")("DrawingStyle") = "cylinder"
    35. chart1.Series("K").BorderDashStyle = ChartDashStyle.Solid
    36. chart1.Series("K").BorderWidth = 2
    37. chart1.Series("K").IsVisibleInLegend = False
    38. chart1.Series("K").IsValueShownAsLabel = False
    39. chart1.Series("K").Points(lastIndex - 1).LabelBackColor = Color.White
    40. chart1.Series("K").Points(lastIndex - 1).LabelFormat = "C0"
    41. chart1.Series("K").Points(lastIndex - 1).Label = lastSelectedCosts.ToString(wertFormat, culture) ' & " €"
    42. chart1.Series("K")("PointWidth") = "0.50"
    43. chart1.Series("K")("StackedGroupName") = "Group100"
    44. 'how to override this with customlabels on axis.x???
    45. 'wird nicht angezeigt
    46. chart1.ChartAreas("Default").AxisX.CustomLabels.Add(New CustomLabel(von_X.ToOADate(), bis_X.ToOADate(), "", 1, LabelMarkStyle.None))
    47. 'or
    48. 'wird nicht angezeigt
    49. For intVal As Integer = 0 To ints - 1
    50. chart1.ChartAreas("Default").AxisX.CustomLabels.Add(CDbl(intVal) - 1, CDbl(intVal) + 1, CStr("Weeks") & intVal)
    51. Next


    CodeTags korrigiert ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „JTrum“ ()

    Willkommen im Forum.

    JTrum schrieb:

    Bild hochladen scheint nicht zu funktionieren
    Doch: Bilder kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.

    Setze bei Deinem Chart -> ChartAreas -> Axes -> X-Axis -> Interval auf 1.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Willkommen im Forum.
    Setze bei Deinem Chart -> ChartAreas -> Axes -> X-Axis -> Interval auf 1.

    Danke fürs Willkommen.

    Interval steht ja auf 1 (siehe Quellcode). Ich möchte es gern selbst angeben und zwar mit den AxisX.CustomLabels.Add-Methode.
    Wenn das x-Achsen Interval 50 ist möchte ich jedes 5. Label anzeigen und ev. noch spezielle dazu. Das Interval soll 1 sein, aber nur jeder 5. Intervalpunkt sol beschriftet sein. Geht so etwas?

    Bild customLabels

    Jetzt bekomme ich die customLabels angezeigt, aber sie liegen nicht auf den Intervalsteps:

    VB.NET-Quellcode

    1. chart1.Series.Add("K").Color = ColorTranslator.FromHtml("#297AB7") 'MattBlau colorx(0)
    2. chart1.Series("K").Points.DataBindXY(xdate, yValues) 'ints
    3. chart1.ChartAreas("Default").AxisX.IntervalType = DateTimeIntervalType.Weeks
    4. chart1.ChartAreas("Default").AxisX.Interval = 1
    5. chart1.ChartAreas("Default").AxisX.LabelAutoFitStyle = LabelAutoFitStyles.DecreaseFont
    6. chart1.ChartAreas("Default").AxisX.LabelAutoFitMinFontSize = 7
    7. chart1.ChartAreas("Default").AxisX.LabelStyle.Font = My.Settings.fontbold8
    8. chart1.ChartAreas("Default").AxisX.LabelStyle.Angle = 90
    9. chart1.ChartAreas("Default").AxisX.MajorTickMark.Enabled = True
    10. chart1.ChartAreas("Default").AxisX.MinorTickMark.Enabled = False
    11. chart1.ChartAreas("Default").AxisX.IsMarginVisible = False
    12. chart1.ChartAreas("Default").AxisX.CustomLabels.Clear()
    13. For intVal As Integer = 0 To ints - 1
    14. Debug.Print(intVal & " - " & Format(xdate(intVal), "yyyy-MM-dd"))
    15. Select Case intVal
    16. Case 0, 5, 10, 15, 20, ints - 2
    17. chart1.ChartAreas("Default").AxisX.CustomLabels.Add(xdate(intVal).ToOADate(), xdate(ints - 1).ToOADate(), CLS_mips_03.get_WeekNumber(xdate(intVal)) & "/" & xdate(intVal).Year)
    18. End Select
    19. Next
    Bilder
    • 2022-05-16 15_14_49-Window.jpg

      7,98 kB, 864×75, 57 mal angesehen

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

    Lösung gefunden: AxisX.IntervalType, AxisX.Minimum, AxisX.Maximum müssen mit den series DataBindXY(xValues, yValues) zusammenpassen

    VB.NET-Quellcode

    1. Dim ints as integer = CInt(DateDiff(DateInterval.WeekOfYear, von_X, bis_X, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFullWeek))
    2. Dim xdate(ints) As Date 'is looped through and the date of the respective week is added.
    3. Dim xInt(ints) As Integer 'is looped through and the numbers of the interval-count added.
    4. chart1.ChartAreas("Default").AxisX.IntervalType = DateTimeIntervalType.NotSet
    5. chart1.ChartAreas("Default").AxisX.Interval = 1
    6. chart1.ChartAreas("Default").AxisX.Minimum = 0
    7. chart1.ChartAreas("Default").AxisX.Maximum = ints - 1
    8. chart1.ChartAreas("Default").AxisX.CustomLabels.Clear()
    9. For intVal As Integer = 0 To ints - 1
    10. Dim kw_run As String = ""
    11. kw_run = myClass.set_WeekFormat(myClass.get_WeekNumber(xdate(intVal)), xdate(intVal), True)
    12. chart1.ChartAreas("Default").AxisX.CustomLabels.Add(intVal, intVal + 1, kw_run, 0, LabelMarkStyle.None)
    13. Next
    14. 'Series
    15. chart1.Series("mySeries").Points.DataBindXY(xInt, yValues)
    16. '...

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