Laden...

Probleme mit Zed Graph - Diagramm verschoben zeichnen

Erstellt von Waldi vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.625 Views
W
Waldi Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren
Probleme mit Zed Graph - Diagramm verschoben zeichnen

Hallo zusammen,

ich hänge jetzt seit 3 Tagen am selben Problem und komm absolut nicht weiter.
Mein Problem: Ich lasse 2 Linien in ein Diagramm zeichen, welche aber verschoben sein sollen. Das heißt Startpunkt für 1. Linie soll der 1.Punkt im Diagramm sein. Startpunkt für 2. Linie soll der 2.Punkt im Diagramm sein. Dies funktioniert auch( aber nur dann wenn die X-Achsenbeschriftung Zahlen sind siehe Foto). Da ich aber keine Zahlen sondern string-Werte für die X-Achsenbeschriftung habe, kann ich die Kurven nicht mehr verschieben. Ich hoffe mir kann jemand weiterhelfen.

Code für Zahlenbeschriftung:


            double[] X_WERT;
            X_WERT = new double[MyVars.Anzahl_Count_Unterbrechung];

            double[] Versuch;
            Versuch = new double[MyVars.Anzahl_Count_Unterbrechung];

            int w = 0;
            int u = 1;

            for (int i = 0; i < MyVars.Anzahl_Count_Unterbrechung; i++)
            {
                X_WERT[i] = i + 1 + w;
                Versuch[i] = i + 1 + u;

                w++;
                u++;
            }


 
            //Erzeugen Sie eine rote Kurve mit der "Kurve 1" in der Legende
            LineItem myCurve = myPane.AddCurve("Unterbrechungszeit",X_WERT, MyVars.Messwerte_Unterbrechung, Color.Red);
            //Machen Sie die Symbole undurchsichtig, sie mit weiß füllend
            myCurve.Symbol.Fill = new Fill(Color.White);

            
            // Erzeugen Sie eine grüne Kurve mit der "Kurve 2" in der Legende
            myCurve = myPane.AddCurve("Wiederherstellungszeit",Versuch, MyVars.Messwerte_Wiederherstellung, Color.LimeGreen);
            // Machen Sie die Symbole undurchsichtig, sie mit weiß füllend
            myCurve.Symbol.Fill = new Fill(Color.White);

Hier der Code wenn ich mit strings für die X-Achsenbeschriftung arbeite



            //Erzeugen Sie eine rote Kurve mit der "Kurve 1" in der Legende
            LineItem myCurve = myPane.AddCurve("Unterbrechungszeit",null, MyVars.Messwerte_Unterbrechung, Color.Red);
            //Machen Sie die Symbole undurchsichtig, sie mit weiß füllend
            myCurve.Symbol.Fill = new Fill(Color.White);

            
            // Erzeugen Sie eine grüne Kurve mit der "Kurve 2" in der Legende
            myCurve = myPane.AddCurve("Wiederherstellungszeit",null, MyVars.Messwerte_Wiederherstellung, Color.LimeGreen);
            // Machen Sie die Symbole undurchsichtig, sie mit weiß füllend
            myCurve.Symbol.Fill = new Fill(Color.White);


            //Set the XAxis labels
            myPane.XAxis.Scale.TextLabels = MyVars.Uhrzeit_Wiederherstellung;
            
            //Set the XAxis to Text type
            myPane.XAxis.Type = AxisType.Text;



Wie könnte ich dieses Problem lösen???

P
48 Beiträge seit 2008
vor 16 Jahren

Hi Waldi,

die Punkte, welche du übergibst, haben nur einen Wert, in dem Fall: Y.
Ohne dazugehörige X-Werte, werden die Kurven nicht korrekt dargestellt.

Dazu einfach eine PunkteListe erstellen

PointPairList aList = new PointPairList();

diese füttern

aList.Add(new PointPair(X, Y));

dann dein CurveItem erstellen


            LineItem aCurve = new LineItem(aLegend, aList, 
            aColor, ZedGraph.SymbolType.Circle);

und adden

itsGraphControl.GraphPane.CurveList.Add(aCurve);

wenn du jetzt manuell die X-Werte auf TextLabels umbaust, zb so


         itsGraphControl.GraphPane.XAxis.Type = AxisType.Text;      
         itsGraphControl.GraphPane.XAxis.TextLabels = aXTextList;

dann sollte es funktionieren (sieht Anhang).

Grüße,

Psy

W
Waldi Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Hallo psy,

erstmals vielen Dank für deine Hilfe!!!
Es funktioniert aber leider immer noch nicht. Gleiches Resultat wie davor. Ich hab es mal so versucht wie du es mir beschrieben hast.



            //PunkteListe erstellen
            PointPairList aList = new PointPairList();
            PointPairList bList = new PointPairList();

            // Pairlist mit Daten füllen
            aList.Add(new PointPair(2, 31000));
            aList.Add(new PointPair(3, 32000));
            aList.Add(new PointPair(4, 30245));
            aList.Add(new PointPair(5, 29212));

            bList.Add(new PointPair(1, 28000));
            bList.Add(new PointPair(2, 28000));
            bList.Add(new PointPair(3, 28000));
            bList.Add(new PointPair(4, 28000));

            LineItem myCurve = myPane.AddCurve("Unterbrechungszeit", aList, Color.Black, ZedGraph.SymbolType.Circle);
            LineItem meineKurve = myPane.AddCurve("Wiederherstellungszeit", bList, Color.Red, ZedGraph.SymbolType.Diamond);


Soweit funktioniert alles einwandfrei(siehe Bild1). Probleme gibt es jetzt, wenn ich die X-Achsenbeschriftung zu einem string umwandle. Das heißt wenn ich die Zeilen


            myPane.XAxis.Type = AxisType.Text;
            myPane.XAxis.Scale.TextLabels = MyVars.Uhrzeit_Wiederherstellung;
 

einfüge, werden die Startpunkte wieder zusammengelegt(siehe Bild 2). Kennst du vielleicht noch ne Möglichkeit wie ich dieses Problem in Griff bekommen könnte??

W
Waldi Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren
P
48 Beiträge seit 2008
vor 16 Jahren

Hui .. lange Suche kurzer Text ...

du musst myCurve.IsOverrideOrdinal auf true setzen.
dann sollte es gehen.

Grüße,

Psy

W
Waldi Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Hallo psy,

jetzt endlich hat es funktioniert. Ich möchte mich nochmals vielmals für deine Hilfe bedanken!!!!!

Gruß Waldi