Chart Steigung einer Series ermitteln

  • VB.NET
  • .NET (FX) 4.5–4.8

    Chart Steigung einer Series ermitteln

    Guten Morgen zusammen,

    ich füge Datenpunkte anhand einem DataTable einer Chart Series hinzu. Diese bestehen aus einer Zeitangabe (Format: "06:1"1) an der x-Achse und einer Zahl an der y-Achse.
    Dazu meine Methode:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub setChartSeries(ByVal dataTable As DataTable, ByVal strSeriesName As String, ByVal cha As System.Windows.Forms.DataVisualization.Charting.Chart)
    2. If cha.InvokeRequired Then
    3. cha.Invoke(New setChartSeriesInvoker(AddressOf setChartSeries), dataTable, strSeriesName, cha)
    4. Else
    5. If Chart1.Series.IndexOf(strSeriesName) > -1 Then Me.Chart1.Series.RemoveAt(Chart1.Series.IndexOf(strSeriesName)) 'Serie löschen, wenn bereits vorhanden
    6. Me.Chart1.Series.Add(strSeriesName) 'Serie neue hinzufügen
    7. Me.Chart1.Series(strSeriesName).ChartType = DataVisualization.Charting.SeriesChartType.Line
    8. Me.Chart1.Series(strSeriesName).Color = Color.DarkGray
    9. Me.Chart1.Series(strSeriesName).BorderWidth = 3
    10. Dim dtDateTime As DateTime
    11. Dim strTime As String
    12. For Each row As DataRow In dataTable.Rows
    13. dtDateTime = DateTime.Parse(row(0).ToString)
    14. strTime = Format(dtDateTime, "HH:mm")
    15. Me.Chart1.Series(strSeriesName).Points.AddXY(strTime, row(1).ToString)
    16. Next
    17. End If
    18. End Sub


    Damit möchte ich die Gesamtleistung über den Zeitverlauf darstellen um Produktionsausfälle besser zu identifizieren. Das klappt soweit.

    Nun habe ich mir gedacht, dass ich anhand der Steigung die Leistung mit anderen Tagen vergleichen könnte.
    Dafür wollte ich Start und Endpunkte der TrendLinie auslesen, um damit die Steigung zu berechnen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub testSub()
    2. Me.Chart1.DataBind()
    3. With Chart1
    4. .Series.Add("Trend")
    5. .Series("Trend").ChartType = DataVisualization.Charting.SeriesChartType.Spline
    6. .Series("Trend").BorderWidth = 1
    7. .Series("Trend").BorderDashStyle = DataVisualization.Charting.ChartDashStyle.Dash
    8. .Series("Trend").Color = Color.DarkBlue
    9. .Series("Trend").IsVisibleInLegend = False
    10. ' Trend Linie einzeichnen
    11. .DataManipulator.FinancialFormula(DataVisualization.Charting.FinancialFormula.Forecasting, "Linear,1,false,false", .Series("Gesamt"), .Series("Trend"))
    12. End With
    13. Dim dpLetzterPunkt As DataPoint = Chart1.Series("Trend").Points(Chart1.Series("Trend").Points.Count - 1)
    14. MsgBox(dpLetzterPunkt.ToString)
    15. End Sub


    Nun wird mir aber kein x-Wert bei dem ersten und letzten Punkt ausgegeben:
    {x=0, y = 236,351}

    Ich vermute, dass liegt daran, dass ich auf der x-Achse die Zeiten einfüge... Aber trotzdem muss es doch eine x-Koordinate auf dem Chart geben, mit der sich die Steigung berechnen lässt? ?(

    Oder gibt es hierzu eventuell einen anderen Ansatz? :)

    Danke für eure Hilfestellung,

    Grüße Jan