Änderung der Punktfarbe beim Chart

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von tina83.

    Änderung der Punktfarbe beim Chart

    Hallo zusammen!

    Ich bin Anfänger bei VB.NET und komme grad nicht mehr weiter. Ich möchte gern bei einem Graph jedem einzelnen Punkt einen anderen Farbwert zuordnen können. Die Punkte kommen aus einer Ascii-Datei und haben xyz-Koordinaten, die nur zweidimensional dargestellt werden. Dabei hat jeder Punkt auch seinen Grauwert. Die Ascii hab ich erstmal in eine DataTable reingeladen. Mit der Funktion

    VB.NET-Quellcode

    1. Chart1.Series(0).Points.DataBind(DataTable.DefaultView, "y", "z", Nothing)

    werden die Punkte in einer Chart angezeigt. Soweit funktioniert das alles. Nur möchte ich jetzt jedem Punkt seinen Grauwert zuteilen. Die Ausgangsdaten sehen folgendermaßen aus (Reihenfolge: x y z Grauwert)

    -0.000 0.280 -0.769 101
    -0.000 0.284 -0.765 105

    Hoffentlich weiß jemand von euch wie ich den jeweiligen Grauwert den Punkten zuordnen kann. Ich bin um jede Hilfe sehr dankbar - auch wenn es mit einem Chart vllt überhaupt nicht geht.

    Vielen Dank schon mal!

    Gruß

    VB.NET-Quellcode

    1. dim tmpColor as color = Color.FromArgb(255,Wert,Wert,Wert)


    Grauwerte zeichnen sich im RGB-Raum dadurch aus, dass R=G=B, darum ist auch nur ein Wert in deiner Tabelle angeben bzw ausreichend. Wo die Farbe in dem Chart zugeordnet wird weiß ich nicht. Für welchen Parameter steht "Nothing"?

    lg
    Danke für den Tipp!

    bei Color.FromArgb gibt es bei mir aber einen Fehlermeldung:
    Argument not specified for Paramenter p1 of Private Property Color(p1 as String) as System.Drawing.Color

    Nothing habe ich benutzt, da ich ja noch etwas angeben muss und Nothing bietet mir eben einen Defaultwert.
    Poste doch bitte mal den kompletten Code Deiner Property.
    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!
    hier mein Code:

    VB.NET-Quellcode

    1. Dim DataTable As New DataTable
    2. Dim Dt As New DataTable
    3. Dim pfad As String = "I:\Daten\Polycom\Poly2D_10_10_range.asc"
    4. Private Sub ToolStripButton3_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton3.Click
    5. Dim inhalt As String
    6. Dim objDateiLeser As StreamReader
    7. objDateiLeser = New StreamReader(pfad)
    8. inhalt = objDateiLeser.ReadToEnd()
    9. objDateiLeser.Close()
    10. objDateiLeser = Nothing
    11. ' in DataGridView einlesen
    12. Dim lines() As String = System.IO.File.ReadAllLines(pfad)
    13. DataTable.Columns.Add("x")
    14. DataTable.Columns.Add("y")
    15. DataTable.Columns.Add("z")
    16. DataTable.Columns.Add("Grauwert")
    17. DataTable.Columns.Add("V-Winkel")
    18. DataTable.Columns.Add("Range")
    19. Dim Zeile As Integer = 0
    20. For Each ll As String In lines
    21. Dim pp() As String = ll.Split(" "c)
    22. DataTable.Rows.Add(pp(0), pp(1), pp(2), pp(3), pp(4), pp(5))
    23. Zeile += 1
    24. Next
    25.  
    26. DataGridView1.DataSource = DataTable
    27. Chart1.Series(0).Points.DataBind(DataTable.DefaultView, "y", "z", Nothing)
    28. End Sub
    ahhh, da gabs ne Property. Die hab ich gelöscht und jetzt kommt diese Fehlermeldung nicht mehr... Danke!!

    ABER:

    VB.NET-Quellcode

    1. Dim tmpColor As Color = Color.FromArgb(255, wert, wert, wert)

    Wie bekomm ich nun hier die gesamte Spalte von DataGridView rein? Einfach

    VB.NET-Quellcode

    1. Dim tmpColor As Color = Color.FromArgb(255, "Grauwert")

    geht nicht, da der String Grauwert nicht als Color konvertiert werden kann.
    Du musst die Farbe jeder Zelle einzeln setzen, also mit For Each Deine Spalte durchklickern und setzen.
    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 hab ich schon fast befürchtet.

    Ich habe mal eine allgemeine Frage: Ist überhaupt ein Datagridview und Chart die beste Wahl oder gibt es noch andere Tools, die dafür besser geeignet sind?

    Hintergrund: Meine Ausgangsdatei (Ascii) beinhaltet mehrere 100.000 Punkte (bzw. Zeilen), kann aber auch über 1 Mio. werden. Ich möchte alle Punkte grafisch anzeigen lassen und im Hintergrund Berechnungen durchführen. Dies sollte aber nicht allzu lange bzgl. der Zeit dauern.
    Chart ist fabelhaft Databindable. Das hats mit DataGridView gemein.

    Nur Chart ist readonly, und die Präsentation ist natürlich ganz anners als bei DGV.

    Worauf es also ankommt ist die Datenbasis, und da ist typisiertes Dataset am günstigsten.
    An typDataset kann man sowohl ein Chart anbinden, als auch ein DGV.

    Damit hat man dann eine Oberfläche, bei der man übers Grid Daten eingeben kann, und übers Chart angugge. Gugge ChartTester
    Du hast offensichtlich mehrere Probleme, die Du hier in diesem Thread zusammengewurschtelt hast.
    Trenne diese sauber, löse sie einzeln und unabhängig und füge dann die Teillösungen zu einem gemeinsamen Projekt zusammen.
    1. Daten aus einer Datei einlesen (ggf. umrechnen) und sinnvoll bereitstellen zur weiteren Verarbeitung.
    2. Anzeige von Daten in einem Chart.
    3. Speichern von dings und bums.
    ----------------------

    VB.NET-Quellcode

    1. Dim argb As Integer = &HC3C3C3 ' Dein Wert halt
    2. Dim tmpColor As Color = Color.FromArgb(argb)
    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!
    Punkt 1 funktioniert
    Punkt 2 funktioniert auch
    Punkt 3 kommt noch irgendwann


    Mit folgenden Code

    VB.NET-Quellcode

    1. Dim argb As String = RGB(100, 100, 100)
    2. Dim tmpColor As Color = Color.FromArgb(argb)
    3. Chart1.Series(0).Color = tmpColor

    bekomme ich keine Farbe an die Punkte bzw. ich seh keine Punkte mehr. Entweder die sind weiß oder sind nicht da, ka.
    das hab ich mir mittlerweile schon fast gedacht, dass das evtl. gar nicht geht

    Verständlich ist das ganze auf ne andere Weise. Das ergibt eben kein übliches Chart, sondern eine Fläche aus Punkten. Interpolationslinien sollen keine dargestellt werden, sondern nur Punkte. Da diese so eng beieinander liegen, sind Linien dazwischen eher störend als hilfreich und würde man sowieso nicht sehen.
    Und damit ich nicht eine einfarbige Fläche bekomme, möchte ich gern die Farbe der einzelnen Punkte mit dargestellt haben, denn auf einem "bunten" Bild erkenntbar man mehr wie auf einem einfarbigen.
    -0.000 0.280 -0.769 101

    VB.NET-Quellcode

    1. dim Grauwert as integer = 101 ' wie du ihn ausliest ist dein bier^^
    2. dim tmpColor as color = Color.FromArgb(255, Grauwert, Grauwert, Grauwert) 'Ja, dreimal Grauwert übergeben. Die 255 steht für den Alphawert und meint "keine Transparenz".

    Wie du nun tmpColor deinem Punkt im Chart zuweist weiß ich nicht, ist scheinbar nicht möglich. Die große Bastler-Alternative wäre ein eigenes Control, dass eine Auflistung von Datenpunkten (Koordinaten + Farbe) darsellen kann. Wenn du dir das zutraust...