【发布时间】:2014-08-30 17:28:12
【问题描述】:
VB 2008 .NET 框架 3.5 MSCHART - 快速图表类型
是否可以让 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)
这不是我想要的。
我需要做两件事中的一件:
-
手动添加数据点,并能够仅显示刚进入的最后 100 个或最后 1000 个数据点。这必须在不重新填充图表的情况下完成。只显示完整数据点集的一部分。
wSample = wSample + 1 Chart1.Series("readings").Points.AddXY(wSample, wReading) Chart1.Series("readings").SHOWONLYTHELAST100DATAPOINTSWITHOUTCLEARING -
使用
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
注意:执行导致我必须清除并重新绑定数据以处理添加单个数据点的过程会给我带来问题,因为它花费的时间太长。我只是在寻找最快、最有效的方法来处理这个问题。感谢您抽出宝贵时间阅读本文...!
【问题讨论】:
-
欢迎控制肮脏的黑客。尝试使用 Linq 查询(方法 2)而不是
Chart1.Update设置 XAxis 的最小值/最大值,例如(与.Max相同,对于Maximum):Chart1.ChartAreas(0).AxisX.Minimum = (From p As DataVisualization.Charting.DataPoint In Chart1.Series(0).Points Select p.XValue).Min -
谢谢,这很有帮助。我还没有进行 linq 查询,但我将 .Minimum 设置为(总数据点减去 10),效果很好。我认为数据点的数量需要等于我在图表中看到的数量,这太复杂了。感谢您的好解决方案。 - 杰夫
-
很高兴听到。我已添加我的评论作为答案。
标签: vb.net winforms charts subset datapoint