Как добавить данные в реальном времени в график ZedGraph с двойной осью Y, используя C #? - PullRequest
3 голосов
/ 13 августа 2010

Для моего проекта мне нужно добавлять и обновлять данные в реальном времени на график с двумя осями Y. Значения Y и Y2 имеют одинаковое значение X, и я его уже создал. Теперь у меня есть функция, которая добавляет новые пары точек в списки кривых.

Вот моя проблема: мои значения Y и Y2 всегда добавляются в список кривой первой кривой. Как я могу получить значение 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;

        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 во второй список кривой?

Ответы [ 2 ]

9 голосов
/ 13 августа 2010

Сам нашел возможное решение.Вот мои изменения кода:

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 и т. Д.

Надеюсь, это поможет всем, у кого есть такая же или похожая проблема.

1 голос
/ 25 августа 2011

Вот «более приятная» реализация выше:

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