我的问题是,无论何时我向图表添加一个点,它都会压缩所有点。相反,我想让它自动滚动。
这里有两个.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);
}
}
答案 0 :(得分:6)
您可以选择以下选项:
您可以为您添加到右侧的每个点(在某个数字后)从左侧删除一个点
您可以移动x轴Minimum
和Maximum
值
您可以将图表设置为缩放和平移,然后平移,即移动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轴的Minimum
和Maximum
都没有设置,即它们是double.NaN
。
最后一个选项可让您方便地滚动数据。
第一个保持数据点数低,但丢失了除最后一点之外的所有数据。
让我们看一下工作中的所有选项:
请注意,选项2和3还假设您具有有效的x值。如果不这样做,则需要对x轴进行索引并使用点索引而不是值。