2014-08-30 51 views
2

VB 2008 .NET Framework 3.5的 的MSChart - 快绳图表类型VB.NET CHART-显示总的数据点的子集

是否有可能有一个MS图表控制包含20000个数据点,但是仅示出最后的100?

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

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

这不是我想要的。

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

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

这不是我想要的。

,我需要做的1 2两件事:

  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 
    

注意:这样做使我一定要清除并重新绑定的数据处理另外的一个数据点的原因的过程我的问题,因为它需要太长时间。我只是寻找最快,最有效的方式来处理这个问题。感谢您抽出时间来阅读...!

+1

欢迎来到肮脏的黑客控制。尝试使用Linq查询(方法2)而不是“Chart1.Update”来设置XAxis的Minimum/Maximum。 (与'.Max'相同'Maximum'):'Chart1.ChartAreas(0).AxisX.Minimum =(From p As DataVisualization.Charting.DataPoint In Chart1.Series(0).Points Select p.XValue).Min ' – Jens 2014-08-30 19:46:48

+0

谢谢,这非常有帮助。我还没有做linq查询,但我将.Minimum设置为(完全数据点减10),完美运行。我认为它太复杂了,认为数据点的数量需要等于我在图表中看到的数量。感谢您的好解决方案。 - 杰夫 – user3670107 2014-09-01 18:03:03

+0

很好听。我已经添加了我的评论作为答案。 – Jens 2014-09-01 20:08:11

回答

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值一些点在最后一点之前。

+0

请注意,我的X值仅仅是一个计数器,它对应于一次距离(一次一英尺)。所以,我可以简单地从数据点数中减去100,并获得我的最后100个数。我不理解您的linq查询...你能否提供一个能正确设置min以显示最后100个的查询?还请注意,我已经改变了我的逻辑,不删除任何数据点,因为获得正确的最小值解决了我的问题。 (将在linq上阅读,但看到一个工作示例是最有帮助的。) - 杰夫 – user3670107 2014-09-02 15:18:08