Chart & X-Achse Beschriftung

  • VB.NET

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von hw522.

    Also ich habe bisher kein Beispiel gefunden, bei dem der X-Achse Werte zugewiesen wurden.
    Bei den Points mit den Datenpaaren (AddXY-Methode) zur Zeichnung des Graphen kein Problem, das betrifft aber nicht die Beschriftung der X-Achse. Wo/wie geht das?
    Den Post versteh ich leider inhaltlich nicht (ganz).

    hw522 schrieb:

    Also ich habe bisher kein Beispiel gefunden, bei dem der X-Achse Werte zugewiesen wurden.
    Klingt nach: Du änderst nix am Chart bezüglich der Achsen(beschriftung).

    hw522 schrieb:

    Bei den Points mit den Datenpaaren (AddXY-Methode) zur Zeichnung des Graphen kein Problem
    Was ist kein Problem?

    hw522 schrieb:

    Wo/wie geht das?
    Wo/wie geht was?
    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.
    Das ist wörtlich zu nehmen wie es da steht:
    Also ich habe bisher kein Beispiel gefunden, bei dem der X-Achse Werte zur BESCHRIFTUNG zugewiesen wurden.
    Bei den Points mit den Datenpaaren (AddXY-Methode) zur Zeichnung des Graphen kein Problem, das betrifft aber nicht die Beschriftung der X-Achse.

    Wo/wie geht das?

    ==> wo und wie weist man der X-Achse die Beschriftung zu?
    Achso.
    Naja, ich denke nicht, dass Du jetzt schon einen Code zur Zuweisung der Werte zur Beschriftung brauchst. Wir sollten erstmal klären, warum Deine Achse schon eine vom Default abweichende Beschriftung hat. Wir man es richtig macht können wir dann klären, sobald die Ursache für die falsche Beschriftung (also Datum statt 0, 1, 2) gefunden wurde. Ansonsten kann es passieren, dass der vorhandene, versteckte Falschcode das alles wieder zunichte macht. Daher bitte Inhalt der FormX.Designer.VB posten, wobei FormX das Form ist, wo sich das falsch beschriftete Chart befindet.
    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.

    Chart & X-Achse Beschriftung

    Ich habe jetzt ein neues Projekt ohne Zusätze, formatierung etc. gemacht

    Quellcode

    1. ​Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim inzidenz_arr() As String = File.ReadAllLines("inzidenz_rnk.txt")
    4. Dim datum_arr() As String = File.ReadAllLines("inz_datum.txt")
    5. Dim t As Double
    6. For t = 0 To inzidenz_arr.Count - 1
    7. Dim iz As Double = inzidenz_arr(t)
    8. Chart1.Series(0).Points.AddXY(t, iz)
    9. Next t
    10. End Sub
    11. End Class


    Ergebnis im Entwurf und im Debug:
    Bilder
    • entwurf_test.jpg

      57,63 kB, 838×518, 29 mal angesehen
    • entwurf_debug.jpg

      47,92 kB, 817×503, 29 mal angesehen
    @hw522 Form mit ChartControl und ComboBox:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Windows.Forms.DataVisualization.Charting
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. ComboBox1.Items.Clear()
    5. ComboBox1.Items.AddRange(New String() {"MMM", "MMMM", "dd.MM.yyyy", "MM.yyyy", "MMM.yyyy", "MMMM.yyyy", "MM.yy", "HH.mm.ss"})
    6. Dim dt = DateTime.Now
    7. For i = 0 To 20
    8. Dim x = i
    9. Dim y = i '* i
    10. 'Me.Chart1.Series(0).Points.AddXY(x, y)
    11. 'Me.Chart1.Series(0).Points.AddXY(x, dt.AddHours(i))
    12. Me.Chart1.Series(0).Points.AddXY(dt.AddHours(i), y)
    13. Next
    14. Chart1.ChartAreas(0).AxisX.LabelStyle.Angle = 45 ' geneigte Beschriftung der x-Achse
    15. ComboBox1.SelectedIndex = 2
    16. End Sub
    17. Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    18. Chart1.ChartAreas(0).AxisX.LabelStyle.Format = ComboBox1.SelectedItem.ToString()
    19. End Sub
    20. End Class
    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!

    hw522 schrieb:

    Das klappt dann so nicht.
    Ich habe nur ein sehr einfaches Beispiel gecodet.
    Du kannst da reinpacken, was immer Du willst.
    Und:
    Zitiere bitte gefälligst nicht komplette Posts über den Deinen.
    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!
    Klingt, als ob nun zwar bekannt ist, wie man es hinbekommt, aber der Fehler, um den es eigentlich ging, wurde immer noch nicht gefunden. Das ist schlecht und führt ggf. dazu, dass der Fehler wieder auftritt. Und dann stehen wir wieder am Anfang.
    Was ich eigentlich meinte, was gepostet werden sollte: Im Projektverzeichnis gibt es eine Datei, die vermutlich heißt: Form1.Designer.vb. Die bitte per Visual Studio oder Editor öffnen, Inhalt kopieren und hier posten.
    Bilder
    • Variante über Visual Studio.png

      52,07 kB, 756×461, 36 mal angesehen
    • Variante über Dateiexplorer.png

      13,87 kB, 419×269, 31 mal angesehen
    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.
    Hier form1.designer.vb:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
    2. Partial Class Form1
    3. Inherits System.Windows.Forms.Form
    4. 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
    5. <System.Diagnostics.DebuggerNonUserCode()>
    6. Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    7. Try
    8. If disposing AndAlso components IsNot Nothing Then
    9. components.Dispose()
    10. End If
    11. Finally
    12. MyBase.Dispose(disposing)
    13. End Try
    14. End Sub
    15. 'Wird vom Windows Form-Designer benötigt.
    16. Private components As System.ComponentModel.IContainer
    17. 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
    18. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
    19. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
    20. <System.Diagnostics.DebuggerStepThrough()>
    21. Private Sub InitializeComponent()
    22. Dim ChartArea1 As System.Windows.Forms.DataVisualization.Charting.ChartArea = New System.Windows.Forms.DataVisualization.Charting.ChartArea()
    23. Dim Legend1 As System.Windows.Forms.DataVisualization.Charting.Legend = New System.Windows.Forms.DataVisualization.Charting.Legend()
    24. Dim Series1 As System.Windows.Forms.DataVisualization.Charting.Series = New System.Windows.Forms.DataVisualization.Charting.Series()
    25. Dim Series2 As System.Windows.Forms.DataVisualization.Charting.Series = New System.Windows.Forms.DataVisualization.Charting.Series()
    26. Dim Series3 As System.Windows.Forms.DataVisualization.Charting.Series = New System.Windows.Forms.DataVisualization.Charting.Series()
    27. Dim Series4 As System.Windows.Forms.DataVisualization.Charting.Series = New System.Windows.Forms.DataVisualization.Charting.Series()
    28. Dim Series5 As System.Windows.Forms.DataVisualization.Charting.Series = New System.Windows.Forms.DataVisualization.Charting.Series()
    29. Me.ListView1 = New System.Windows.Forms.ListView()
    30. Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    31. Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
    32. Me.TextBox1 = New System.Windows.Forms.TextBox()
    33. Me.Chart1 = New System.Windows.Forms.DataVisualization.Charting.Chart()
    34. Me.TextBox2 = New System.Windows.Forms.TextBox()
    35. Me.TextBox3 = New System.Windows.Forms.TextBox()
    36. Me.btnClose = New System.Windows.Forms.Button()
    37. Me.btnShowSecondForm = New System.Windows.Forms.Button()
    38. CType(Me.Chart1, System.ComponentModel.ISupportInitialize).BeginInit()
    39. Me.SuspendLayout()
    40. '
    41. 'ListView1
    42. '
    43. Me.ListView1.BackColor = System.Drawing.Color.Linen
    44. Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2})
    45. Me.ListView1.FullRowSelect = True
    46. Me.ListView1.GridLines = True
    47. Me.ListView1.HideSelection = False
    48. Me.ListView1.Location = New System.Drawing.Point(25, 27)
    49. Me.ListView1.Name = "ListView1"
    50. Me.ListView1.Size = New System.Drawing.Size(228, 336)
    51. Me.ListView1.TabIndex = 0
    52. Me.ListView1.UseCompatibleStateImageBehavior = False
    53. Me.ListView1.View = System.Windows.Forms.View.Details
    54. '
    55. 'ColumnHeader1
    56. '
    57. Me.ColumnHeader1.Text = "Datum"
    58. Me.ColumnHeader1.Width = 120
    59. '
    60. 'ColumnHeader2
    61. '
    62. Me.ColumnHeader2.Text = "Inzidenz RNK"
    63. Me.ColumnHeader2.Width = 80
    64. '
    65. 'TextBox1
    66. '
    67. Me.TextBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    68. Me.TextBox1.Location = New System.Drawing.Point(25, 385)
    69. Me.TextBox1.Name = "TextBox1"
    70. Me.TextBox1.Size = New System.Drawing.Size(228, 22)
    71. Me.TextBox1.TabIndex = 1
    72. '
    73. 'Chart1
    74. '
    75. Me.Chart1.BackColor = System.Drawing.Color.LightSteelBlue
    76. ChartArea1.AxisX.LabelStyle.Interval = 0R
    77. ChartArea1.AxisX.LabelStyle.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.[Auto]
    78. ChartArea1.Name = "ChartArea1"
    79. Me.Chart1.ChartAreas.Add(ChartArea1)
    80. Legend1.Name = "Legend1"
    81. Me.Chart1.Legends.Add(Legend1)
    82. Me.Chart1.Location = New System.Drawing.Point(275, 27)
    83. Me.Chart1.Name = "Chart1"
    84. Series1.ChartArea = "ChartArea1"
    85. Series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline
    86. Series1.Legend = "Legend1"
    87. Series1.LegendText = "Inzidenz RNK"
    88. Series1.Name = "Series0"
    89. Series1.ShadowOffset = 2
    90. Series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Date]
    91. Series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    92. Series2.ChartArea = "ChartArea1"
    93. Series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point
    94. Series2.IsValueShownAsLabel = True
    95. Series2.Legend = "Legend1"
    96. Series2.LegendText = "Min-/Maximum"
    97. Series2.MarkerSize = 12
    98. Series2.Name = "Series1"
    99. Series2.YValuesPerPoint = 6
    100. Series3.ChartArea = "ChartArea1"
    101. Series3.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line
    102. Series3.IsVisibleInLegend = False
    103. Series3.Legend = "Legend1"
    104. Series3.Name = "Series2"
    105. Series3.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    106. Series3.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    107. Series4.ChartArea = "ChartArea1"
    108. Series4.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line
    109. Series4.Legend = "Legend1"
    110. Series4.LegendText = "Minimum"
    111. Series4.MarkerColor = System.Drawing.Color.FromArgb(CType(CType(128, Byte), Integer), CType(CType(128, Byte), Integer), CType(CType(255, Byte), Integer))
    112. Series4.Name = "Series3"
    113. Series4.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    114. Series4.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    115. Series5.ChartArea = "ChartArea1"
    116. Series5.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line
    117. Series5.Legend = "Legend1"
    118. Series5.LegendText = "Maximum"
    119. Series5.MarkerColor = System.Drawing.Color.Lime
    120. Series5.Name = "Series4"
    121. Series5.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    122. Series5.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.[Double]
    123. Me.Chart1.Series.Add(Series1)
    124. Me.Chart1.Series.Add(Series2)
    125. Me.Chart1.Series.Add(Series3)
    126. Me.Chart1.Series.Add(Series4)
    127. Me.Chart1.Series.Add(Series5)
    128. Me.Chart1.Size = New System.Drawing.Size(1008, 522)
    129. Me.Chart1.TabIndex = 2
    130. Me.Chart1.Text = "Chart1"
    131. '
    132. 'TextBox2
    133. '
    134. Me.TextBox2.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    135. Me.TextBox2.Location = New System.Drawing.Point(25, 413)
    136. Me.TextBox2.Name = "TextBox2"
    137. Me.TextBox2.Size = New System.Drawing.Size(119, 22)
    138. Me.TextBox2.TabIndex = 3
    139. '
    140. 'TextBox3
    141. '
    142. Me.TextBox3.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    143. Me.TextBox3.Location = New System.Drawing.Point(161, 413)
    144. Me.TextBox3.Name = "TextBox3"
    145. Me.TextBox3.Size = New System.Drawing.Size(92, 22)
    146. Me.TextBox3.TabIndex = 4
    147. '
    148. 'btnClose
    149. '
    150. Me.btnClose.Location = New System.Drawing.Point(25, 506)
    151. Me.btnClose.Name = "btnClose"
    152. Me.btnClose.Size = New System.Drawing.Size(228, 30)
    153. Me.btnClose.TabIndex = 8
    154. Me.btnClose.Text = "E N D E"
    155. Me.btnClose.UseVisualStyleBackColor = True
    156. '
    157. 'btnShowSecondForm
    158. '
    159. Me.btnShowSecondForm.BackColor = System.Drawing.Color.LightSalmon
    160. Me.btnShowSecondForm.Location = New System.Drawing.Point(25, 458)
    161. Me.btnShowSecondForm.Name = "btnShowSecondForm"
    162. Me.btnShowSecondForm.Size = New System.Drawing.Size(228, 23)
    163. Me.btnShowSecondForm.TabIndex = 7
    164. Me.btnShowSecondForm.Text = "neeu Daten eingeben"
    165. Me.btnShowSecondForm.UseVisualStyleBackColor = False
    166. '
    167. 'Form1
    168. '
    169. Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
    170. Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    171. Me.AutoSize = True
    172. Me.ClientSize = New System.Drawing.Size(1284, 561)
    173. Me.Controls.Add(Me.btnClose)
    174. Me.Controls.Add(Me.btnShowSecondForm)
    175. Me.Controls.Add(Me.TextBox3)
    176. Me.Controls.Add(Me.TextBox2)
    177. Me.Controls.Add(Me.Chart1)
    178. Me.Controls.Add(Me.TextBox1)
    179. Me.Controls.Add(Me.ListView1)
    180. Me.Name = "Form1"
    181. Me.Text = "Form1"
    182. CType(Me.Chart1, System.ComponentModel.ISupportInitialize).EndInit()
    183. Me.ResumeLayout(False)
    184. Me.PerformLayout()
    185. End Sub
    186. Friend WithEvents ListView1 As ListView
    187. Friend WithEvents TextBox1 As TextBox
    188. Friend WithEvents ColumnHeader1 As ColumnHeader
    189. Friend WithEvents ColumnHeader2 As ColumnHeader
    190. Friend WithEvents Chart1 As DataVisualization.Charting.Chart
    191. Friend WithEvents TextBox2 As TextBox
    192. Friend WithEvents TextBox3 As TextBox
    193. Friend WithEvents btnClose As Button
    194. Friend WithEvents btnShowSecondForm As Button
    195. End Class



    aufgrund des Codeumfangs Spoiler hinzugefügt und CodeTags korrigiert ~VaporiZed

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

    Ja, damit kann man was anfangen. Jetzt ist es leicht, das Problem nachzustellen. Und ja, durch Deine Angaben in Post#25 hätte ich/man den "Fehler" schon finden können.
    Das Chart geht bei der Angabe XValuesType=Date von einem Startwert von 01.01.1900 aus. Wenn Du nun mit Chart1.Series(0).Points.AddXY() einen x-Wert von 0 hinzufügst, ist das der 01.01.1900.
    Der Wert 10 ist dann der 11.01.1900. Und so weiter. Um also auf das Jahr 2022 zu kommen, müsstest Du den x-Werten die Tageszahl zwischen 01.01.1900 und 01.01.2022 hinzufügen. Und das wär: 44560. "Ausgerechnet" mit der Codezeile:

    VB.NET-Quellcode

    1. Dim Offset = CInt((#01/01/2022# - #01/01/1900#).TotalDays)

    Also musst Du, um x = 0 entspricht 01. Januar 2022 zu setzen, dieses Offset mitgeben, also

    VB.NET-Quellcode

    1. Chart1.Series(0).Points.AddXY(t + 44560, iz)


    ##########

    @hw522:
    Aber es geht noch einfacher:

    VB.NET-Quellcode

    1. Chart1.Series(0).Points.AddXY(t + Startdatum, iz)

    Dabei ist Startdatum eben das erste Datum, was nicht unterschritten wird.
    Bei

    VB.NET-Quellcode

    1. Chart1.Series(0).Points.AddXY(t + Date.Today, iz)

    wird heute als Startdatum gesetzt.
    Datumsangaben im Code gehen so: #MM/TT/JJJJ#, also z.B. #06/17/2022# für den heutigen 17. Juni 2022
    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.

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

    Das ist Dein Code, aus Post#27.
    Ganze Zahlen, die zu dem Startdatum addiert werden, entsprechen ganze Tage.
    Um präziser zu sein, kannst Du das auch z.B. so machen:

    VB.NET-Quellcode

    1. Dim Startdatum = Date.Today 'oder ein anderes Startdatum, wie oben genannt, z.B. mit der Schreibweise #MM/TT/JJJJ#
    2. Chart1.Series(0).Points.AddXY(Startdatum.AddDays(t), iz)

    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.

    hw522 schrieb:

    Kritik geht hier scheinbar immer nur in eine Richtung
    Genau.
    Wir erwarten die Beantwortung unserer Fragen, um Dir umfassend helfen zu können:

    RodFromGermany schrieb:

    Wie generierst Du die Daten im LV?
    Wie übernimmst Du die Daten im LV?
    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!
    Das mit dem LV habe ich schon berichtet, hier ausführlich:

    Quellcode

    1. ​ Dim inzidenz_arr() As String = File.ReadAllLines("inzidenz_rnk.txt")
    2. Dim datum_arr() As String = File.ReadAllLines("inz_datum.txt")

    und

    Quellcode

    1. ​Dim zz As Integer = 0
    2. For i = 0 To datum_arr.Count - 1
    3. zz += 1
    4. With ListView1.Items.Add(zz)
    5. .SubItems.Add(datum_arr(i))
    6. .SubItems.Add(inzidenz_arr(i))
    7. End With
    8. Next

    hw522 schrieb:

    hier ausführlich:
    OK.
    Poste mal den Inhalt der Datei "inz_datum.txt" oder ein paar Zeilen davon.
    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!