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

VB.NET图表-显示总数据点的子集,vb.net,winforms,charts,subset,datapoint,Vb.net,Winforms,Charts,Subset,Datapoint,VB 2008 .NET FRAMEWORK 3.5 MSCHART-快速折线图类型 是否可以让MS图表控件包含20000个数据点,但只显示最后100个 我知道我可以从datatable中选择最后100个,并将其用作数据源 Chart1.DataSource = cMs2.dsData.Tables("readings").Select(wFilter, wSort).Take(100) 那不是我想要的 我知道我可以用最后100个数据点填充数组或集合,并将其用作数据源 Chart1.Serie

VB 2008 .NET FRAMEWORK 3.5 MSCHART-快速折线图类型

是否可以让MS图表控件包含20000个数据点,但只显示最后100个

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

Chart1.DataSource = cMs2.dsData.Tables("readings").Select(wFilter, wSort).Take(100)
那不是我想要的

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

Chart1.Series("readings").Points.DataBindXY(colCtr, colReadings)
那不是我想要的

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

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

wSample = wSample + 1

Chart1.Series("readings").Points.AddXY(wSample, wReading)

Chart1.Series("readings").SHOWONLYTHELAST100DATAPOINTSWITHOUTCLEARING
使用数据绑定初始化具有一定数量总读数的图表,然后手动一次添加一个新数据点,同时删除最旧的数据点。例如,用100个数据点初始化图表,然后添加一个新的数据点,删除第一个数据点,使我们回到100。我成功地完成了这一步,但图表的表现与我预期的不同。图表将增长,在“已删除”数据点所在的位置保持空白/空。我会更新图表,但不会刷新。请注意,我可以花更多的时间来初始化图表清除/填充,当每个新数据点出现时,我没有时间进行初始化

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

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

通过修改轴的.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值。

欢迎使用肮脏黑客的控制。尝试使用Linq查询方法2而不是Chart1.Update来设置XAxis的最小/最大值。例如,使用.Max来设置最大值:Chart1.ChartAreas0.AxisX.Minimum=从p开始设置为DataVisualization.Charting.DataPoint In Chart1.Series0.Points选择p.XValue.MinThanks,这非常有用。我还没有进行linq查询,但我将.Minimum设置为总数据点减去10,这非常有效。我把它弄得太复杂了,认为数据点的数量需要等于我在图表中看到的数量。谢谢你的好办法很高兴听到你这么说。我添加了我的评论作为答案。请注意,我的X值只是一个计数器,对应于一次1英尺的距离。所以,我可以简单地从数据点的数量中减去100,得到最后的100。我不理解你的linq查询。。。您能否提供一个查询,将最小值正确设置为显示最后100?还请注意,我已将逻辑更改为不删除任何数据点,因为获得正确的最小值解决了我的问题。将阅读linq,但看到一个工作示例是最有帮助的。-杰夫