Heatmap über MySQL-Daten generieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Heatmap über MySQL-Daten generieren

    Hallo,

    ich zeichne aktuell verschiedene Daten in einer MySQL-Datenbank auf und würde diese gerne mittels VB visualisieren.
    Ich habe eine kleine Anwendung gemacht, in der ich ein Datagridview mit den MySQL-Daten als Data Source befülle. Ab jetzt fehlen mir die Ideen.

    Mein Ziel war die Darstellung der Daten in einer Heatmap, bei der ich die Daten in eine Matrix schiebe, die viertelstündliche Werte anzeigt und bei der ich eine Ober- und Untergrenze festlege, um die Werte entsprechend farblich zu markieren.

    Bisher habe ich die Daten aus der MySQL-DB nach Excel exportiert und dort ein Makro laufen lassen - das Ergebnis sieht man im angehangenen Foto.

    Kann mir jemand sagen, wie ich am besten vorgehe?
    Ist das Chart-Objekt für mein Vorhaben noch geeignet?

    Keiner dieser beiden Links konnte mir wirklich weiterhelfen, aber es ist das einzige, was ich zum Thema finden konnte:
    grapecity.com/componentone/doc…ne-flexchart/heatmap.html
    advsofteng.com/doc/cdnetdoc/discreteheatmap.htm

    Grüße

    *Topic verschoben*
    Bilder
    • Heatmap.png

      8,31 kB, 1.443×105, 63 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    ich finde deine Daten sollten genau "andersrum" sein.

    mit DGV ein Zeitraster anlegen und die Tage 1 bis 31, und dann halt Monatlich abfragen aus der Datenbank

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. CheckedListBox1.CheckOnClick = True
    5. CheckedListBox2.CheckOnClick = True
    6. With CheckedListBox1
    7. 'stunden
    8. For i = 0 To 23
    9. CheckedListBox1.Items.Add("Std. " & Format(i, "00"))
    10. Next
    11. For i = 1 To .Items.Count - 1 Step 4
    12. .SetItemChecked(CInt(i), True)
    13. Next i
    14. End With
    15. 'minuten
    16. With CheckedListBox2
    17. For i = 0 To 55 Step 5
    18. .Items.Add("Min. " & Format(i, "00"))
    19. Next
    20. For i = 1 To .Items.Count - 1 Step 2
    21. .SetItemChecked(CInt(i), True)
    22. Next i
    23. End With
    24. 'Zeitraster erstellen
    25. For Each s As String In CheckedListBox1.CheckedItems
    26. For Each f As String In CheckedListBox2.CheckedItems
    27. ListBox1.Items.Add(s.Substring(s.Length - 2) & ":" & f.Substring(f.Length - 2))
    28. Next
    29. Next
    30. End Sub
    31. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    32. 'DGV Tage 1 bis 31
    33. Dim n As Long
    34. Dim columns As DataGridViewColumn() = New DataGridViewColumn(30) {}
    35. For i = 0 To columns.Length - 1
    36. Dim col As DataGridViewColumn = New DataGridViewTextBoxColumn()
    37. Dim j As Long
    38. n = j + i + 1
    39. col.HeaderText = CStr(n)
    40. columns(i) = col
    41. columns(i).Width = 20
    42. DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter
    43. Next
    44. DataGridView1.RowTemplate.Height = 18
    45. Me.DataGridView1.Columns.AddRange(columns)
    46. 'dein Zeitraster
    47. DataGridView1.Rows.Add(ListBox1.Items.Count)
    48. DataGridView1.RowHeadersWidth = CInt(DataGridView1.RowHeadersWidth * 2.25)
    49. For x As Integer = ListBox1.Items.Count - 1 To 0 Step -1
    50. Dim value As String = ListBox1.Items(x).ToString
    51. DataGridView1.Rows(x).HeaderCell.Value = value
    52. Next
    53. End Sub
    54. End Class


    Das hat mir beides sehr weitergeholfen, ich danke euch.




    So, ich habe mal meine letzte Antwort vollständig gelöscht und hier mein aktueller Stand:

    Ich habe ein zweites DGV erzeugt und nutze dieses zur Visualisierung, da mein erstes DGV durch die DataSource "falsch" formatiert ist.
    Quasi folgender Ablauf:
    - Daten werden aus DB in DGV geladen > Werte werden ins Zieldesgin (zweites DGV) geladen und farblich angepasst
    - im Zieldesign sind Spalte und Zeile vertauscht

    Nun ist es so, dass ich das DGV befülle und immer wenn ich 96 Werte in die erste Zeile des zweiten DGVs geschrieben habe, dann will ich die nächste Zeile befüllen.
    Irgendwo habe ich nun leider einen einfachen Fehler (Index außerhalb des Bereichs), der mich nicht weiterkommen lässt.

    Ich weiß, dass der Fehler im Zählen liegt, aber komme logisch gerade nicht auf die Lösung.

    Kurz gesagt:
    96 Einträge > neue Zeile > 96 Einträge > neue Zeile > 96 Einträge ...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim j As Integer = 0
    3. Dim k As Integer = 1
    4. For w = 0 To DataGridView1.Rows.Count - 1
    5. For x = 0 To 95
    6. DataGridView2.Item(x, j).Value = DataGridView1.Item(k, w).Value
    7. Next
    8. j = j + 1
    9. Next
    10. End Sub


    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Murdersquad“ ()

    Ich hatte hier noch gar nicht die Lösung meines Problems beschrieben, vielleicht braucht es mal jemand:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim j As Integer = 0
    3. Dim n As Integer = 0
    4. For w = 0 To DataGridView1.Rows.Count - 1
    5. DataGridView2.Item(j, n).Value = DataGridView1.Item(1, w).Value
    6. j = j + 1
    7. If j = 96 Then
    8. j = 0
    9. n = n + 1
    10. End If
    11. Next
    12. End Sub