Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net图表控件自动滚动/禁用自动缩放_.net_Scroll_Charts - Fatal编程技术网

.Net图表控件自动滚动/禁用自动缩放

.Net图表控件自动滚动/禁用自动缩放,.net,scroll,charts,.net,Scroll,Charts,我目前正在构建一个应用程序,该应用程序可以绘制流数据。我可以很好地接收数据点并将其添加到图表中,但在添加每个点后,图表会自动改变其比例以包含所有数据点(即,添加的数据点越多,点之间的距离就越近)。我怎样才能关掉这个 理想情况下,我希望图形只是沿着x轴滚动,而不是在每次添加点时设置比例。最好的方法是什么 以下是我用于在数据到达串行端口时添加数据点的代码: chart1.Series["Series1"].Points.AddY(parsed); 该图只是默认的快速线图。下面是一段时间内绘制数据的

我目前正在构建一个应用程序,该应用程序可以绘制流数据。我可以很好地接收数据点并将其添加到图表中,但在添加每个点后,图表会自动改变其比例以包含所有数据点(即,添加的数据点越多,点之间的距离就越近)。我怎样才能关掉这个

理想情况下,我希望图形只是沿着x轴滚动,而不是在每次添加点时设置比例。最好的方法是什么

以下是我用于在数据到达串行端口时添加数据点的代码:

chart1.Series["Series1"].Points.AddY(parsed);
该图只是默认的快速线图。下面是一段时间内绘制数据的图形截图。正如您所看到的,它只是随着时间的推移压缩图形,而不是只保留比例并向右滚动。
这将禁用自动缩放:

chart1.ChartAreas[0].AxisY.ScaleBreakStyle.Enabled = false;
chart1.ChartAreas[0].AxisY.Maximum = 0.3;
chart1.ChartAreas[0].AxisY.Minimum = -0.3;

Iv'e通过以下方式完成此操作:

“编辑”是一个模拟,它在每个计时器刻度上添加点。最小值和最大值递增,因此显示的部分递增,从而出现滚动效果

private void mockTimerTick(object sender, EventArgs e)
{
        int i;

        if (isRunning)
            return;

        lock (_syncObj)
        {
            isRunning = true;
            for (i = currentOffset; i < samplesPerSegment + currentOffset; i++)
            {
                _series.Points.AddXY(mockPoints[i].X, mockPoints[i].Y);

                if (i >= _chart.ChartAreas["ChartArea1"].AxisX.Maximum)
                {
                    _chart.ChartAreas["ChartArea1"].AxisX.Maximum++;
                    _chart.ChartAreas["ChartArea1"].AxisX.Minimum++;
                    _chart.ChartAreas["ChartArea1"].AxisX.ScaleView.Scroll(_chart.ChartAreas["ChartArea1"].AxisX.Maximum);

                }               
            }
            isRunning = false;
        }

        currentOffset = i;
}
private void mockTimerTick(对象发送方,事件参数e)
{
int i;
如果(正在运行)
返回;
锁定(_syncObj)
{
isRunning=true;
对于(i=currentOffset;i=_chart.ChartAreas[“ChartArea1”].AxisX.Maximum)
{
_chart.ChartAreas[“ChartArea1”].AxisX.Maximum++;
_chart.ChartAreas[“ChartArea1”].AxisX.Minimum++;
_chart.ChartAreas[“ChartArea1”].AxisX.ScaleView.Scroll(_chart.ChartAreas[“ChartArea1”].AxisX.Maximum);
}               
}
isRunning=false;
}
currentOffset=i;
}

这不起作用。问题在于x轴上的压缩。我已经找到了一个解决办法,但我认为它并不那么优雅。将数据点添加到图表时,将计算x轴最大值和最小值之间的差值,如果该差值高于某个值,则最小值将增加,从而滚动图表<代码>如果((chart1.ChartAreas[0].AxisX.Maximum-chart1.ChartAreas[0].AxisX.Minimum)>20{chart1.ChartAreas[0].AxisX.Minimum++;}您找到了此仪表的解决方案吗?