График данных в реальном времени для приложения формы с oxyplot

Я работаю с данными в реальном времени в приложении формы. Мои данные будут работать в режиме реального времени и будут скользить как волны осциллографа.

Как я могу это сделать? Я просто вижу пример Wpf в документах библиотеки, но мне нужно работать с приложением.

Я новичок в oxyplot. Извините, если я ошибаюсь

Также я могу использовать другую графическую библиотеку, если вы предложите.

заранее спасибо


person darkrpd    schedule 09.03.2016    source источник
comment
В чем вопрос?   -  person FoggyFinder    schedule 17.03.2016


Ответы (1)


Я предполагаю, что вы используете Visual Studio для создания приложения WinForms. В этом случае я бы использовал инструмент «Диаграмма», который находится в разделе «Данные» на панели инструментов, вместо OxyPlot. Когда вы перетащите его, по умолчанию имя будет Chart1. Он также будет иметь уже добавленную общую серию. Следующая функция создаст гладкую кривую:

    private void GenerateCurve()
    {
        chart1.ChartAreas[0].Position.Auto = true;
        chart1.ChartAreas[0].AxisY.Title = "SIN()";
        chart1.ChartAreas[0].AxisX.Title = "Degrees";

        // Set graph limits
        chart1.ChartAreas[0].AxisX.Minimum = 0;
        chart1.ChartAreas[0].AxisX.Maximum = 200;
        chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
        chart1.ChartAreas[0].AxisX.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
        chart1.ChartAreas[0].AxisX.Interval = 90;
        chart1.ChartAreas[0].AxisX.MinorTickMark.Enabled = true;
        chart1.ChartAreas[0].AxisX.MinorTickMark.Interval = 10;

        chart1.ChartAreas[0].AxisY.Minimum = -1;
        chart1.ChartAreas[0].AxisY.Maximum = 1;
        chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
        chart1.ChartAreas[0].AxisY.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.FixedCount;
        chart1.ChartAreas[0].AxisY.Interval = .1;
        chart1.ChartAreas[0].AxisY.MinorTickMark.Enabled = true;

        // Set spline instead of line
        chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;

        // Generate points
        for (int x = 0; x < 1000; x++)
        {
            double y = Math.Sin(x);
            chart1.Series[0].Points.AddXY((double)x, Math.Sin(x));
            if (chart1.Series[0].Points.Count > 100)
            {
                chart1.Series[0].Points.RemoveAt(0);
                chart1.ChartAreas[0].AxisX.Minimum = chart1.Series[0].Points[0].XValue;
                chart1.ChartAreas[0].AxisX.Maximum = x;
                Application.DoEvents();
                System.Threading.Thread.Sleep(100);
            }
        }
    }
person Bob Thiele    schedule 30.03.2016