Chart Control

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ketzei.

    Chart Control

    Hallo,

    wie kann ich bei einem Chart Control die X-Achse so beschriften wie ich es gerade brauche, bei gleichbleibenden X-Werten??

    Habe im Anhang ein Bild vom jetzigen Zustand, die X-Werte sind immer von 1-8 (eigentlich sind das die Stunden pro Schicht) und die Y-Werte werden immer neu berechnet.
    Jetzt will ich, dass an der X-Achse nicht 0,1,2,3,... steht sondern 6,7,8,9,.... wenn Frühschicht ist, 14,15,16,17,... wenn Spätschicht ist und 22,23,24,1,2,... wenn Nachschicht ist.
    Eine Funktion in der ich die aktuelle Schicht ermittle habe ich schon,

    nur das mit dem Diagramm fehlt leider noch, da komme ich nicht weiter!! :?:
    Bilder
    • snap.jpg

      61,88 kB, 1.367×324, 573 mal angesehen
    auf [VB 2010] Chart Control x-Achse Beschriftung und DataTable Spalte hochzählen von 01.01.2010 bis 31.12.2010 = DateTime issn Sample.

    Mir ist das Problem nicht klar. Added man einer Series nicht immer einen Punkt mit x und y?

    Und wenn man da statt x = {1, 2, 3, ...} angibt x {8, 9, 10,...} - iwie in die Richtung?

    Aber ich kenn mich mit dem Chart nicht gut aus, sieht aus, das hat ja verschiedenste ViewModes.
    Auf MSDN kann man auch iwo "101 Samples" runnerladen, ich glaub, da war auch eine mächtige Sample-Solution zu allem möglichen mittm Chart-Control dabei.
    oder google nach Visualisation.Charting Samples
    Ah - die Zahlen sind also keine Zahlen, sondern Zeitwerte!

    Dann gib ihm auch Zeitwerte. Dass von den Zeitwerten nur die Stunde angezeigt wird, kann man ja im FormatString klarmachen.

    Genau das führe ich im gegebenen Link ja vor: Nur dass meine Zeitwerte mit "MMM" formatiert sind, und du müsstest an gleicher Stelle "HH" einsetzen.
    So habe jetzt das alles so eingestellt, aber irgendwie ist die X-Skalierung total falsch!!!

    so hier mal der komplette Code:

    VB.NET-Quellcode

    1. Dim f As Integer
    2. Dim Var1() As String
    3. Dim part1(9) As Integer
    4. Dim part2(9) As Integer
    5. Dim z As Integer
    6. Dim y As Integer
    7. Dim ds As Date
    8. Dim de As Date
    9. Dim dj As Date
    10. Dim prog1 As String
    11. Dim prog2 As String
    12. Dim stunden As Integer
    13. Chart1.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Hours
    14. Chart1.ChartAreas(0).AxisX.LabelStyle.Format = "HH"
    15. Chart1.ChartAreas(0).AxisX.LabelStyle.IntervalType = DateTimeIntervalType.Hours
    16. Chart1.ChartAreas(0).AxisX.Minimum = settings.Startzeit.Hour 'z.B. 06:00:00
    17. Chart1.ChartAreas(0).AxisX.Maximum = settings.Endzeit.Hour 'z.B. 14:00:00
    18. Chart1.ChartAreas(0).AxisX.Interval = 1
    19. Chart1.Series(1).Points.Clear()
    20. Chart1.Series(3).Points.Clear()
    21. Chart1.Series(0).Points.Clear()
    22. Chart1.Series(2).Points.Clear()
    23. Try
    24. lines = IO.File.ReadAllLines(settings.Dateipfad & Now.ToString("ddMMyyyy") & ".BDE")
    25. Catch ex As Exception
    26. MsgBox("Datei konnte nicht gelesen werden!" & vbCrLf & ex.Message, MsgBoxStyle.Exclamation)
    27. GoTo ende
    28. End Try
    29. For x = 20 To UBound(lines)
    30. Var1 = lines(x).Split(CChar(vbTab)) 'jeweils bei einem TAB trennen 'Var1(2) = Uhrzeit; Var1(0) = Programmnummer
    31. dj = CDate(Format(Now, "dd.MM.yyyy ") & Var1(2).ToString)
    32. ds = CDate(settings.Startzeit)
    33. de = CDate(settings.Endzeit)
    34. f = ((CInt(Format(CDate(Var1(2)), "HH")) + 2) Mod 8) + 1 'Formel für die Berechnung der Stunde 1-8
    35. If dj >= ds And dj <= de Then
    36. If Replace(Var1(0).ToString, " ", "") = settings.Programm1 Then
    37. For z = f To 8
    38. part1(z) = part1(z) + 1
    39. 'Chart1.Series(1).Points.AddXY(f + stunden - 0.5, part1(z) * settings.AnzahlNutzen1)
    40. Chart1.Series(1).Points.AddXY(CDate(Var1(2)).Hour, part1(z) * settings.AnzahlNutzen1)
    41. Next z
    42. prog1 = Var1(91).ToString
    43. ElseIf Replace(Var1(0).ToString, " ", "") = settings.Programm2 Then
    44. For y = f To 8
    45. part2(y) = part2(y) + 1
    46. 'Chart1.Series(3).Points.AddXY(f + stunden - 0.5, part2(y) * settings.AnzahlNutzen2)
    47. Chart1.Series(3).Points.AddXY(CDate(Var1(2)).Hour, part2(y) * settings.AnzahlNutzen1)
    48. Next y
    49. prog2 = Var1(91).ToString
    50. End If
    51. End If
    52. Next x


    im Anhang das Diagramm!

    Diese X-Achse versteh ich nicht ganz!!! :?:
    Bilder
    • snap.jpg

      335,14 kB, 1.411×766, 518 mal angesehen
    ich verstehe deinen Code nicht, aber das Diagramm scheint mehrere Tage anzuzeigen, und für jede Stunde eine X-Beschriftung generiert zu haben, und zwar - korrekt - mit FormatString "HH" formatiert, sodaß nur der ganze Stundenwert geschrieben ist.

    Wie habe ich das denn in meinem Sample hingebracht, dass ich über den Zeitraum eines Jahres nur 4 Abschnitte beschrifte?
    habs jetzt hinbekommen glaub ich:

    VB.NET-Quellcode

    1. Chart1.ChartAreas(0).AxisX.LabelStyle.IntervalType = DateTimeIntervalType.Auto
    2. Chart1.ChartAreas(0).AxisX.IntervalType = DateTimeIntervalType.Hours
    3. Chart1.ChartAreas(0).AxisX.Minimum = settings.Startzeit.Hour
    4. Chart1.ChartAreas(0).AxisX.Maximum = settings.Endzeit.Hour + 1
    5. Chart1.ChartAreas(0).AxisX.Interval = 1
    6. Chart1.ChartAreas(0).AxisX.MajorGrid.IntervalType = DateTimeIntervalType.Auto
    7. Chart1.ChartAreas(0).AxisX.MajorGrid.Interval = 1