自动放大波形的波纹

本文关键字:波形 放大 | 更新日期: 2023-09-27 18:30:01

我以图表的形式显示我的数据。但来自传感器的数据总是在变化。如何自动放大到峰峰值,以便跟踪波形?例如,Y轴显示0到10,然而,数据在4到4.2之间变化,有时在6到6.3之间变化。这是一个小小的涟漪。如果我将Y轴间隔保持在0~10,我看不到波形(只会看到一条直线)。我知道如何手动放大Y轴间隔。有什么方法可以自动显示波纹吗?

            DataPoint dp0 = new DataPoint(x, index);
            DataPoint dp1 = new DataPoint(x, middle);
            DataPoint dp2 = new DataPoint(x, ring);
            chart3.Series[0].Points.RemoveAt(0);
            chart3.Series[0].Points.Add(dp0);
            chart4.Series[0].Points.RemoveAt(0);
            chart4.Series[0].Points.Add(dp1);
            chart5.Series[0].Points.RemoveAt(0);
            chart5.Series[0].Points.Add(dp2);
            x++;
private void numericUpDown3_ValueChanged(object sender, EventArgs e)
    {
        if ((numericUpDown3.Value - (decimal)0.1) <= numericUpDown4.Value)
        {
            numericUpDown3.Value = numericUpDown4.Value + (decimal)0.1;
        }
        chart3.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(numericUpDown3.Value);
    }
    private void numericUpDown4_ValueChanged(object sender, EventArgs e)
    {
        if ((numericUpDown4.Value + (decimal)0.1) >= numericUpDown3.Value)
        {
            numericUpDown4.Value = numericUpDown3.Value - (decimal)0.1;
        }
        chart3.ChartAreas[0].AxisY.Minimum = Convert.ToDouble(numericUpDown4.Value);
    }

自动放大波形的波纹

除了jstreet的滚动窗口,您还必须设置AxisY.MinimumAxisY.Maximum,正如您已经了解的那样。

当您应用jstreet的滚动窗口解决方案时,您的数据集将始终包含N DataPoint s。在他的示例代码中,他使用N=10。如果你用DataPointchart3.Series[0].Points的最小值和最大值来调整y轴,你会有一个滚动窗口,当你的数据进入时,它会自动放大波纹:

using System.Linq;
...
chart3.ChartAreas[0].AxisY.Minimum = 
    chart3.Series[0].Points.Min(dp => dp.YValues.Single());
chart3.ChartAreas[0].AxisY.Maximum = 
    chart3.Series[0].Points.Max(dp => dp.YValues.Single());

根据数据的性质,您可能会注意到演示中存在一些抖动。如果这成为一个问题,您将不得不平滑用于调整y轴的值。