2

VB 2008 .NET FRAMEWORK 3.5 MSCHART - FASTLINE 图表类型

是否可以让 MS Chart 控件包含 20,000 个数据点,但只显示最后 100 个?

我知道我可以从我的数据表中选择最后 100 个并将其用作数据源。

Chart1.DataSource = cMs2.dsData.Tables("readings").Select(wFilter, wSort).Take(100)

那不是我想要的。

我知道我可以用最后 100 个数据点填充数组或集合并将其用作数据源。

Chart1.Series("readings").Points.DataBindXY(colCtr, colReadings)

那不是我想要的。

我需要做两件事中的一件:

  1. 手动添加数据点,并且只能显示刚进入的最后 100 个或最后 1000 个数据点。这必须在不重新填充图表的情况下完成。只显示完整数据点集的一部分。

    wSample = wSample + 1
    
    Chart1.Series("readings").Points.AddXY(wSample, wReading)
    
    Chart1.Series("readings").SHOWONLYTHELAST100DATAPOINTSWITHOUTCLEARING
    
  2. 使用 a 初始化具有一定数量总读数的图表databind,然后手动添加一个新数据点,同时删除最旧的数据点。例如,用 100 个数据点初始化图表,然后添加一个新数据点,删除第一个数据点,让我们回到 100。(我成功地做到了这一点,只是图表的行为不像我预期的那样。图表增长,在“已删除”数据点所在的位置保持空白/空。我做了 chart.update 但它没有刷新它。)请注意,我可以花更多时间来初始化图表(clear/populate),我没有随着每个新数据点的出现,是时候做这件事了。

    wSample = wSample + 1
    
    Chart1.Series("readings").Points.AddXY(wSample, wReading)
    
    If Chart1.Series("readings").Points.Count > 100 Then
    
        Chart1.Series("readings").Points.RemoveAt(0)
    
        Chart1.Update()
    
    End If
    

注意:执行一个导致我必须清除并重新绑定数据以处理添加单个数据点的过程会导致我出现问题,因为它花费的时间太长。我只是在寻找最快、最有效的方法来处理这个问题。感谢您抽出时间来阅读...!

4

1 回答 1

1

.Minimum您可以通过修改轴的和值来手动设置每个轴的最小值和最大值,.Maximum例如

Chart1.ChartAreas(0).AxisX.Minimum = 100 'Example value
Chart1.ChartAreas(0).AxisX.Minimum = 200 'Example value

正如对您的问题的评论中所讨论的,您可以使用方法#2(添加数据点并删除数据点索引 0,然后使用 LinQ 从系列中选择新的最小和最大 X 值:

Chart1.ChartAreas(0).AxisX.Minimum = (From p As DataVisualization.Charting.DataPoint In Chart1.Series(0).Points Select p.XValue).Min
Chart1.ChartAreas(0).AxisX.Maximum = (From p As DataVisualization.Charting.DataPoint In Chart1.Series(0).Points Select p.XValue).Max

或者您可以像现在所做的那样,将最小值设置为在最后一点之前的一些点的 X 值。

于 2014-09-01T20:07:28.070 回答