【问题标题】:VB.NET CHART- Display a subset of the total data pointsVB.NET 图表 - 显示总数据点的子集
【发布时间】: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)

这不是我想要的。

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

  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
    

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

【问题讨论】:

  • 欢迎控制肮脏的黑客。尝试使用 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


【解决方案1】:

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

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

正如您问题的 cmets 中所讨论的,您可以使用方法 #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 值。

【讨论】:

  • 请注意,我的 X 值只是一个对应于距离(一次 1 英尺)的计数器。所以,我可以简单地从数据点的数量中减去 100 并得到最后的 100 . 我不理解您的 linq 查询...您能否提供一个查询,正确设置最小值以显示最后 100 个?另请注意,我已将逻辑更改为不删除任何数据点,因为获得正确的最小值解决了我的问题。 (将阅读 linq,但看到一个工作示例是最有帮助的。) - Jeff
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
相关资源
最近更新 更多