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);
}
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;?
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
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
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