如何使用C#在双Y轴ZedGraph图形中添加实时数据?

对于我的项目,我需要添加和更新实时数据到我的双y轴图。 Y和Y2值共享相同的X值,我已经创建了它。 现在我有一个函数可以将新的点对添加到曲线列表中。

这是我的问题:我的Y和Y2值总是被添加到第一条曲线的曲线列表中。 如何将Y2值添加到图表中的第二个曲线列表中?

这是我的function代码:

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

如何将Y2值添加到第二曲线列表?

我自己找到了一个可能的解 以下是我的代码更改:

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

重要的是在“CurveList [i]”中使用索引。 所以[0]是带有Y值的曲线,[1]是带有Y2值的曲线,依此类推。

我希望这可以帮助任何有相同或类似问题的人。

这是上面的“更好”的实现:

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