VB.NET CHART-显示总数据点的子集

时间:2014-08-30 17:28:12

标签: vb.net winforms charts subset datapoint

VB 2008 .NET FRAMEWORK 3.5 MSCHART - FASTLINE CHART TYPE

是否可以让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. 使用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
    
  3. 注意:执行一个导致我必须清除并重新绑定数据以处理添加单个数据点的过程会导致我出现问题,因为它需要很长时间。我只是在寻找最快,最有效的方法来处理这个问题。感谢您抽出宝贵时间阅读本文......!

1 个答案:

答案 0 :(得分: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值。