ZedGraph tutorials

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von OnkelR.

    ZedGraph tutorials

    hallo liebe Forumcommunity,
    wie der Titel schon sagt suche ich nach ZedGraph tutorials welche mir einen Einstieg erleichtern.
    D.h. nicht nur codefetzen sondern wenn möglichst auch ein paar komplett gecodete Beispiele für visual basic 2008

    Des Weiteren hab ich gleich vorweg noch eine Frage.
    Benötigt ZedGraph die Datum"e" (plural von Datum :) ) in einer strickten Reihenfolge oder ist es möglich diese gebunden an einem
    y-Wert aber durcheinander einzulesen und dennoch einem durchgängigen Line-graph zu erhalten?

    Datum durcheinander geht schon

    Hallo brouwny
    auf der X-Achse hab ich das Datum in sortierter Reihenfolge aber in unterschiedlichen Abständen.
    Ob Du das Datum total durcheinander eintragen kannst weiß ich net, doch vielleicht hilft Dir das:

    VB.NET-Quellcode

    1. 'Bei den Grundeinstellungen lege ich für die X_Achse folgendes fest:
    2. 'zg1 ist das ZedGraphControl
    3. Dim myPane As GraphPane = zg1.GraphPane
    4. With myPane.XAxis
    5. .Type = AxisType.Date
    6. .Scale.MinAuto = True
    7. .Scale.MaxAuto = True
    8. .Scale.Format = "dd.MM.yyyy"
    9. .Scale.FontSpec.Family = "Arial"
    10. .Scale.FontSpec.Size = 14
    11. .Scale.FontSpec.IsBold = True
    12. .MajorGrid.IsVisible = True
    13. .Scale.Min = 0
    14. .Scale.Max = 300
    15. End With
    16. 'Graph erstellen:
    17. 'für Y-Achse habe ich Kurs-Werte (Rate) & X eben das Datum (liegt als String vor)
    18. 'die Liste mit diesem Datenpaar hol ich z.B. aus ner xml-Datei
    19. Dim list As New PointPairList
    20. Dim x As Double, y As Double
    21. Dim str_Datum_Kurs As String = ""
    22. Dim Datum_Kurs As Date
    23. Dim Rate As String = ""
    24. For Each Knoten In Knotenliste
    25. str_Datum_Kurs = Knoten.Attributes("Datum").Value.ToString
    26. Datum_Kurs = cdate(str_Datum_Kurs)
    27. Rate = Knoten.Attributes("Rate").Value.ToString
    28. ...
    29. ...
    30. x = Datum_Kurs.ToOADate()
    31. y = CSng(Rate)
    32. list.Add(x, y)
    33. Next
    34. 'falls im GraphControl schon was eingezeichnet wurde,
    35. 'musst Du das leeren:
    36. Try
    37. Dim anz As Integer = zg1.GraphPane.CurveList.Count
    38. For i = 0 To anz - 1
    39. zg1.GraphPane.CurveList(i).Clear()
    40. Next
    41. zg1.AxisChange()
    42. zg1.Refresh()
    43. Catch ex As Exception
    44. '...
    45. End Try
    46. 'jetzt die Werte einzeichnen lassen:
    47. Dim myCurve As LineItem
    48. myCurve = myPane.AddCurve("Labeltext", list, Color.Red, SymbolType.Circle)
    49. myCurve.Symbol.Fill = New Fill(Color.Black)
    50. 'zum Schluss das Steuerelement neu zeichnen lassen
    51. zg1.AxisChange()
    52. zg1.Invalidate()


    Ich hoffe ich konnte helfen!
    Herzlichen Dank OnkelR,
    Das war mir wirklich eine große Hilfe :)
    ich hätte da noch ein paar Fragen,

    1 ist es möglich den Startpunkt und die Skalierung des Charts anzugeben?
    Denn er fängt bei mir an der x Achse beim 01.01.1900 an
    Und die y Achse ist im Bereich von 10 bis 300.

    2 wie kann ich einstellen, das er einen column Graph zeichnet, anstatt einen Line Graph?

    mfg brouwny
    Hey brouwny.
    Hab schon lange net mehr mit Zedgraph gearbeitet.
    Skalierung des Charts legst Du fest, wenn Du x- & y-Achse einstellst:

    VB.NET-Quellcode

    1. Dim myPane As GraphPane = zg1.GraphPane
    2. ...
    3. Dim Datum_min as String = "??.??.????" 'Dein Datum eintragen bzw ermitteln
    4. Dim Datum_max as String = "??.??.????" 'Dein Datum eintragen bzw ermitteln
    5. Dim listeA As New ZedGraph.PointPairList()
    6. Dim listeB As New ZedGraph.PointPairList()
    7. Dim x As Double, y As Double
    8. x = CDate(Datum_min).ToOADate() : y = 25
    9. listeA.Add(x, y)
    10. Dim Balken_A As BarItem 'mit Baritem & .AddBar erzeugst Du jeweils einen Balken
    11. Balken_A = myPane.AddBar("New Bars", listeA, Color.Blue)
    12. x = CDate(Datum_max).ToOADate() : y = 95
    13. listeB.Add(x, y)
    14. Dim Balken_B As BarItem
    15. Balken_B = myPane.AddBar("New Bars 2", listeB, Color.Red)
    16. With myPane.XAxis
    17. .Type = AxisType.Date
    18. '.Scale.MinAuto = True 'entweder weglassen oder auf false setzen
    19. '.Scale.MaxAuto = True 'entweder weglassen oder auf false setzen
    20. .Scale.Min = CDate(Datum_min).ToOADate() -0.1 'ohne -0.1 würde der erste Balken nicht angezeigt
    21. .Scale.Max = CDate(Datum_max).ToOADate() +0.1 'ohne +0.1 würde der letzte Balken nicht angezeigt (mit dem Wert musst Du ein bischen rumspielen, bis es auf Deiner Anzeige passt)
    22. .Scale.BaseTic = CDate(Datum_min).ToOADate()
    23. '.Scale.MajorUnit = DateUnit.Day 'mit MajorUnit MinorUnit MinorStep MajorStep
    24. '.Scale.MinorUnit = DateUnit.Day 'kansste och 'n bischen probieren, ist aber in Deinem Fall wahrscheinlich nicht nötig
    25. '.Scale.MinorStep = 4
    26. '.Scale.MajorStep = 4
    27. .Scale.Format = "dd.MM.yyyy"
    28. .Scale.FontSpec.Family = "Arial"
    29. .Scale.FontSpec.Size = 14
    30. .Scale.FontSpec.IsBold = True
    31. .MajorGrid.IsVisible = True
    32. .MajorGrid.Color = Color.Aqua
    33. .MinorGrid.IsVisible = False
    34. End With



    Hast Du eigentlich die Dokumentation für das Control (ZedGraph Help.chm)?
    Wenn Du das Projekt von sourceforge.net/projects/zedgraph/ herunter lädst
    haste die eigentlich mit drin.

    Na dann viel Spass beim probieren. ^^
    Riesen Dank OnkelR,
    Deine Codebeispiele waren sehr Hilfreich :)
    und es gibt leider im Ganzen i-net fast keine Seite die zu Zedgraph in der Visual basic 2008 Umgebung irgendetwas hergibt,
    deshalb hab ich noch 1ne kleine Frage. ;(
    kannst du mir verraten, was ich an dem Code Beispiel ändern muss um statt einem Datum an der x Achse einen Namen angeben zu können?
    also ähnlich dem hier
    mfg brouwny :)

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

    Nix zu danken, brouwny.

    Ja, hab grad selber mal probiert. Ich benutze ja nur den Linien-Graph.

    VB.NET-Quellcode

    1. With myPane.XAxis
    2. '.Type = AxisType.Date
    3. .Type = AxisType.Text


    damit wir auf der x-Achse Text dargestellt.
    nur, dann müsstest Du auch aus Deinen ZedGraph.PointPairList() den Datumswert mit Personennamen austauschen.
    Doch das geht nicht, weil die PointPairList() 2 Doubles erwartet.
    Ich seh grad, als 3. Wert kann man einen Tag als String übergeben. (sagt die Intellisense)

    VB.NET-Quellcode

    1. Dim x As Double, y As Double
    2. Dim yy As String
    3. x = CDate(Datum_min).ToOADate() : y = 25 : yy = "Ernie"
    4. listeA.Add(x, y, yy)
    5. Dim Balken_A As BarItem
    6. Balken_A = myPane.AddBar("Ernie", listeA, Color.Blue)
    7. x = CDate(Datum_max).ToOADate() : y = 95 : yy = "Bert"
    8. listeB.Add(x, y, yy)
    9. Dim Balken_B As BarItem
    10. Balken_B = myPane.AddBar("Bert", listeB, Color.Red)


    hm, ich hab auf .Type = AxisType.Date gesetzt, da zeigt er Ernie und Bert wenn man mit der Mouse über den betreffenden
    Balken fährt (in Tooltip Art)

    bei .Type = AxisType.Text, zeigt er nüscht auf der x-Achse.

    Ich glaub ich muss mir 'nen Proggi machen nur mit Balkendiagramm. Ich habe zu viele Einstellungen auf das Liniendiagramm
    festgelegt. Da komm ich seniler Hund auch langsam durcheinander und mein Proggi auch.
    Ja weiß nich, wenn Du Lust hast können wir ja über Mail in Verbindung bleiben, gibt doch hier irgenwie ne Funktion dafür, wa.
    Ich werd mich auf alle Fälle mal intensiver damit beschäftigen, nur Heute wirds echt eng.

    Hab was gefunden:
    myPane.Legend.IsVisible = True

    falls Du das noch nicht eingestellt hast. Dann siehst Du Ernie und Bert in der Legende des Charts und
    auf der x-Achse das Datum wie gehabt

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