首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图表自动卷轴(示波器效应)

图表自动卷轴(示波器效应)
EN

Stack Overflow用户
提问于 2018-04-28 11:28:45
回答 1查看 4K关注 0票数 8

我的问题是,每当我在图表上加一个点,它就会压缩所有的点。相反,我想让它自动滚动。

这里有两个.gifs来解释我的问题

我现在拥有的

我想要实现的

我现在的代码是

代码语言:javascript
复制
    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);
        }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-28 14:00:39

你可以选择:

  • 您可以将一个点从左边添加到右边(在某个数字之后)。
  • 您可以转换x轴MinimumMaximum值。
  • 您可以将图表设置为缩放和平移,即移动ScaleView

第一个选项很简单,并将保持DataPoints数不变。这可能是好的,也可能是坏的,取决于你的需要。

其他两个将保持收集的点数,只有潘在图表中。

常见参考资料:

代码语言:javascript
复制
ChartArea ca = chart.ChartAreas[0];
Series s = chart.Series[0];

下面是第一个选项的代码:

代码语言:javascript
复制
s.Points.AddXY(..);
s.Points.RemoveAt(0);
ca.AxisX.Minimum = double.NaN;
ca.AxisX.Maximum = double.NaN;
ca.RecalculateAxesScale();

以下是选项2的代码:

代码语言:javascript
复制
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的代码:

代码语言:javascript
复制
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轴进行索引,并使用点索引而不是值。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50076045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档