繁体   English   中英

图表自动滚动(示波器效果)

[英]Chart Auto Scroll (Oscilloscope Effect)

我的问题是,每当我向图表添加点时,它都会压缩所有点。 相反,我希望它自动滚动。

这是两个.gif来解释我的问题是什么

我现在有什么

在此处输入图片说明

我想要达到的目标

在此处输入图片说明

我现在的代码是

    DateTime dt;

    private void Form1_Load(object sender, EventArgs e)
    {
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        dt = DateTime.Now;
        if (checkBox1.Checked)
        {
            chart1.Series["Light"].Points.AddXY(dt.ToShortTimeString(), 1);
        }
        else
        {
            chart1.Series["Light"].Points.AddXY(dt.ToShortTimeString(), 0);
        }

    }

您可以选择以下选项:

  • 您可以为左侧添加的每个点(在一定数量之后)从左侧删除一个点

  • 您可以移动x轴的MinimumMaximum

  • 您可以将图表设置为缩放和平移然后平移,即移动ScaleView

第一个选项很简单,它将使DataPoints的数量保持不变。 这可能是好是坏,取决于您的需求。

其他两个将保留点的集合,仅在图表中平移。

常用参考文献:

ChartArea ca = chart.ChartAreas[0];
Series s = chart.Series[0];

这是第一个选项的代码:

s.Points.AddXY(..);
s.Points.RemoveAt(0);
ca.AxisX.Minimum = double.NaN;
ca.AxisX.Maximum = double.NaN;
ca.RecalculateAxesScale();

这是选项2的代码:

int ix = s.Points.AddXY(..);

ca.AxisX.Maximum  = s.Points[ix].XValue;
ca.AxisX.Minimum += s.Points[ix].XValue - s.Points[ix-1].XValue;
ca.RecalculateAxesScale();

这是选项3的代码:

int ix = s.Points.AddXY(..);
ca.AxisX.Minimum = double.NaN;
ca.AxisX.Maximum = double.NaN;
ca.RecalculateAxesScale();

ca.AxisX.ScaleView.Zoom(s.Points[ix-pointMax ].XValue, s.Points[ix].XValue );

假设系列中已经有pointMax点。

所有示例都假设您已经有几点。 选项1&3还假定未设置x轴的MinimumMaximum ,即它们是double.NaN

最后一个选项将使您方便地滚动数据。

第一个使数据点计数保持较低,但丢失了除最后一个点以外的所有点。

让我们看一下工作中的所有选项:

在此处输入图片说明

请注意,选项2&3还假定您具有有效的x值。 如果不这样做,则需要使x轴索引并使用点索引而不是值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM