问题
For my project, I need to add and update real-time data to my dual y-axis graph. The Y and Y2 values share the same X value, and I created it already. Now I have a function that adds the new point pairs to the curve lists.
Here is my problem: My Y and Y2 values are always added to the curve list of the first curve. How can I get the Y2 value added to the second curve list in my graph?
Here is my function code:
private void AddDataToGraph(ZedGraphControl zg1, XDate xValue, double yValue1, double yValue2)
{
// Make sure that the curvelist has at least one curve.
if (zg1.GraphPane.CurveList.Count <= 0)
return;
// Get the first CurveItem in the graph.
LineItem curve = zg1.GraphPane.CurveList[0] as LineItem;
if (curve == null)
return;
// Get the PointPairList.
IPointListEdit list = curve.Points as IPointListEdit;
IPointListEdit list2 = curve.Points as IPointListEdit;
// If this is null, it means the reference at curve.Points does not
// support IPointListEdit, so we won't be able to modify it.
if (list == null || list2 == null)
return;
// Add new data points to the graph.
list.Add(xValue, yValue1);
list2.Add(xValue, yValue2);
// Force redraw.
zg1.Invalidate();
}
How can he Y2 values be added to the 2nd curve list?
回答1:
Found a possible solution myself. Here are my code changes:
private void AddDataToGraph(ZedGraphControl zg1, XDate xValue, double yValue1, double yValue2)
{
// Make sure that the curvelist has at least one curve
if (zg1.GraphPane.CurveList.Count <= 0)
return;
// Get the first CurveItem in the graph
LineItem curve = zg1.GraphPane.CurveList[0] as LineItem;
LineItem curve2 = zg1.GraphPane.CurveList[1] as LineItem;
if (curve == null || curve2 == null)
return;
// Get the PointPairList
IPointListEdit list = curve.Points as IPointListEdit;
IPointListEdit list2 = curve2.Points as IPointListEdit;
// If this is null, it means the reference at curve.Points does not
// support IPointListEdit, so we won't be able to modify it
if (list == null || list2 == null)
return;
// add new data points to the graph
list.Add(xValue, yValue1);
list2.Add(xValue, yValue2);
// force redraw
zg1.Invalidate();
}
The important thing is to use the index in the "CurveList[i]". So [0] is my curve with the Y values and [1] is my curve with the Y2 values, and so on.
I hope this helps anybody who has the same or similar problem.
回答2:
Here's a "nicer" implementation of above:
private void AddDataToGraph(ZedGraphControl zg1, XDate xValue, double[] yValues)
{
GraphPane myPane = zg1.GraphPane;
// Make sure that the curvelist has at least one curve
if (myPane.CurveList.Count <= 0)
return;
else if (myPane.CurveList.Count != yValues.Length)
return;
for (int i = 0; i < yValues.Length; i++ )
{
((IPointListEdit)myPane.CurveList[i].Points).Add(xValue, yValues[i]);
}
// force redraw
zg1.Invalidate();
}
来源:https://stackoverflow.com/questions/3478482/how-to-add-real-time-data-in-a-dual-y-axis-zedgraph-graph-using-c