Laden...

Wie Zedgraph ändern in X-Achse Zeit anstelle von Points darzustellen?

Erstellt von TMann13 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.571 Views
T
TMann13 Themenstarter:in
15 Beiträge seit 2013
vor 10 Jahren
Wie Zedgraph ändern in X-Achse Zeit anstelle von Points darzustellen?

Hallo,
ich habe eine funktionierende DLL mit zwei Funktionen für den Zedraph. Einmal um Arrays zu einer Liste hinzuzufügen und eine andere die die Arrays aus der Liste in einem ZedGraph anzeigt.
Derzeit ist die X-Skalierung in Punkten von 0 bis 1023.
Die einzige Frage die ich habe: Was muss ich ändern um anstatt Punkte in Sekunden anzuzeigen?
Die Zeit zwischen 2 Punkten kann ich übergeben an die Funktion (zb 0.03s)
So dass bei 1024 Punkten die Achse von 0 bis 30,72 geht.
Was muss ich hier jetzt ändern?

Danke für Hilfe


public void AddGraph(double[] Values, string LegendName)
    {
        int i = 0;
        PointPairList list = new PointPairList();
        for (i = 0; i < Values.Length; i++)
        {
            list.Add(i, Values[i]);
        }

        if (i > MaxXAxis)
            MaxXAxis = i;

        SList.Add(list);
        SListColor.Add(Color.Black);
        SListName.Add(LegendName);
    }


public void ShowDiagram(string Title, string XAxisName, string YAxisName, int Timeout_ms)
    {


        ZedGraph.ZedGraphControl zgc = new ZedGraphControl();
        GraphPane myPane = zgc.GraphPane;
        LineItem myCurve = null;


        // Set the titles and axis labels
        myPane.Title.Text = Title;
        myPane.XAxis.Title.Text = XAxisName;
        myPane.YAxis.Title.Text = YAxisName;

        for (int i = 0; i < SList.Count(); i++)
        {
            myCurve = myPane.AddCurve(SListName[i], SList[i], SListColor[i], SymbolType.None);
            myCurve.Line.Width = 2;
        }

        // Add gridlines to the plot, and make them gray
        myPane.XAxis.MinorGrid.IsVisible = true;
        myPane.YAxis.MinorGrid.IsVisible = true;
        myPane.XAxis.MinorGrid.Color = Color.LightGray;
        myPane.YAxis.MinorGrid.Color = Color.LightGray;
        myPane.XAxis.MinorGrid.DashOff = 0;
        myPane.YAxis.MinorGrid.DashOff = 0;

        myPane.XAxis.MajorGrid.IsVisible = true;
        myPane.YAxis.MajorGrid.IsVisible = true;
        myPane.XAxis.MajorGrid.Color = Color.Gray;
        myPane.YAxis.MajorGrid.Color = Color.Gray;
        myPane.XAxis.MajorGrid.DashOff = 0;
        myPane.YAxis.MajorGrid.DashOff = 0;

        // Move Legend to buttom
        myPane.Legend.Position = LegendPos.Bottom;

        zgc.AxisChange();

        myPane.XAxis.Scale.Max = MaxXAxis;

        zgc.Location = new Point(0, 0);
        zgc.Size = new Size(panel_diagramm.ClientRectangle.Width, panel_diagramm.ClientRectangle.Height);

        panel_diagramm.Controls.Add(zgc);

    }

R
212 Beiträge seit 2012
vor 10 Jahren

Hi,

Was soll denn 30.72 sein??

Du willst also die ?(X oder Y)Achse wenn die Punkte zuviele werden auf 30.72 setzen??

Woher weißt du das Deine X-Achse von 0-1023 geht??

Wenn du das irgentwo Festlegst ist dies der Punkt an dem ich ansetzten würde.

vllt hier ?myPane.XAxis.Scale.Max = MaxXAxis;?

T
TMann13 Themenstarter:in
15 Beiträge seit 2013
vor 10 Jahren

Die Array-Größe ist 1024. Wenn ich diese derzeit auf dem ZedGraph-Anzeige geht die X-Skala von 0 bis 1023.
Da ich aber weiß das zwischen jedem Punkt die Zeit 0,03sec vergangen ist weiß ich damit dass die X-Achse von 0sec bis (1024*0,03 =) 30,72sec geht.
Ich möchte also statt Punkte diese Zeitskala auf der X-Achse darstellen.

>myPane.XAxis.Scale.Max = 30;
Mit diesem Befehl wird nur die Länge der X-Achse gesetzt. Dh von derzeit 1024 geht sie dann nur noch bis 30.

Danke und Grüße

R
212 Beiträge seit 2012
vor 10 Jahren

Achso, ok hast du eine Dkomentation der DLL, bzw. wo hast du die DLL her?

Oder wenn du die schrittweite einstellen kannst nimm einfach als schrittweite 30,72 als Achsen Titel t/sec, und nimm die anzahl an Punkten *30,72

T
TMann13 Themenstarter:in
15 Beiträge seit 2013
vor 10 Jahren

Der Tipp war jetzt doch der richtige.
Ich muss nur das Intervall (0.03) an zwei Stellen übergeben:


myPane.XAxis.Scale.Max = (MaxXAxis * Intervall);

In der AddGraph-Funktion wird ein X/Y-Array erstellt mit list.Add. Statt "time" war hier zuvor ein "i" drin und somit waren die X-Werte von 0..1023. Jetzt werden die X-Werte anhand meines übergebenen Intervalls erstellt.:

double time = 0; 
            for (i = 0; i < Values.Length; i++)
            {
                list.Add(time, Values[i]);
                time = time + Intervall; //calculate X-Value with time instead of points.
            }

Danke vielmals