图表控件中的数据分组

分组将一个序列中的连续数据点替换为一个分组的点。使用指定的公式以及使用的每个点的原始值计算每个分组的点的 X 和 Y 值。

有很多数据点时分组特别有用,这样易于在图表中发现趋势。

在对序列中的数据分组之前,确保序列中的数据按 X 值的升序排序。有关排序的更多信息,请参见对数据进行排序

分组公式

使用 DataManipulator 对象完成分组。有两种分组类型:按轴标签分组和按间隔分组。如果要将空点作为零值点处理,请将 DataManipulator.IgnoreEmptyPoints 属性设置为**“false”**。

调用 GroupGroupByAxisLabel 方法时,必须指定公式。可以为某些或所有数据点的 Y 值指定单独的公式。必须至少提供一个公式,用于计算点的所有 Y 值。

公式参数的格式为:

"formula[, value:formula, [value:formula[,...]]]"

其中 formula 为一个公式名称,value 为应用该公式的数据点的 Y 值名称(例如“Y2”)。

例如,如果在分组过程中使用公式字符串 "AVE, X:CENTER, Y2:MAX",将导致:

  • 在间隔的中心绘制分组的点。

  • 将所有输入点的最大 Y2 值用于分组的点的所有 Y2 值。

  • 计算所有其他 Y 值的平均值。

有关这些公式的列表以及它们的用途说明,请参考下面的表。请注意,对于 X 值,默认公式(未指定公式时应用的公式)为“First”公式。还要指出的是,X 值的公式仅确定将为指定间隔绘制所得的数据点的位置(例如,沿间隔的左边界或右边界绘制或者在间隔的中心绘制)。

备注

默认情况下,使用“FIRST”公式计算 X 值。

公式

说明

用于 X 值

AVE

给定间隔内所有数据点的平均值。

否。

MAX

给定间隔内所有数据点的最大值。

否。

MIN

给定间隔内所有数据点的最小值。

否。

SUM

给定间隔内所有数据点的总计值。

否。

LAST

给定间隔内所有数据点的最后一个值。

是。在间隔的最右侧边缘绘制新数据点。

FIRST(默认值)

给定间隔内所有数据点的第一个值。

是。在间隔的最左侧边缘绘制新数据点。

HiLoOpCl

计算最高值、最低值、开盘值和收盘值。开盘值是间隔中的第一个值,收盘值是间隔中的最后一个值。

说明说明
此公式返回四个 Y 值,应只用于使用四个 Y 值的图表类型(例如 线图)。

否。

HiLo

给定间隔内所有数据点的最大值和最小值。

说明说明
此公式返回两个 Y 值,应只用于使用两个 Y 值的图表类型(例如气泡图)。

否。

Count

已经组合为一个点的数据点数目。

否。

DistinctCount

已经组合为一个点的数据点数目。具有相同主 Y 值的数据点被视为一个点。

否。

Variance

给定间隔内所有数据点间的方差。

否。

Deviation

给定间隔内所有数据点间的偏差。

否。

Center

给定间隔内所有数据点间的偏差。

是。在间隔的中心绘制新数据点。

按间隔分组

使用 Group 方法来按间隔分组。此方法使用数据点的 X 值将序列数据点拆分为间隔,然后使用一个点替换每个间隔。

下面的代码演示如何按季度分组并将结果序列存储在名为“ResultSeries”的序列中。

' Group points by year quarters.
Chart1.DataManipulator.Group("AVE", 3, IntervalType.Months, "MySeries", "ResultSeries")
// Group points by year quarters.
Chart1.DataManipulator.Group("AVE", 3, IntervalType.Months, "MySeries", "ResultSeries");

按轴标签分组

使用 GroupByAxisLabel 方法来按轴标签分组。此方法将具有相同 AxisLabel 属性值的所有数据点分组,并使用您指定的公式计算结果 Y 值。

备注

经过这样的分组运算后,数据点将按相应 AxisLabel 属性值的升序来排序。

下面的代码对表示合理销售额的点分组。它假定将数据点的 X 值绑定到存储销售人员名字的字符串,使用 AxisLabel 属性存储每个销售人员名字。它将每个销售人员名字的销售额相加,然后按销售人员将总计输出到输入序列(默认输出序列)。

' Group by salesperson name, and display total sale amounts.
Chart1.DataManipulator.GroupByAxisLabel("SUM", "GoldMedals")
// Group by salesperson name, and display total sale amounts.
Chart1.DataManipulator.GroupByAxisLabel("SUM", "GoldMedals");

对多个序列分组

通过在 GroupGroupByAxisLabel 方法中指定逗号分隔的序列名称列表来对多个序列分组。

警告

如果指定输出序列,则输出序列的数目和输入序列的数目必须相同。否则,该方法将引发异常。

如果指定“*”作为输入序列,该方法将对 Chart.Series 集合中的所有序列分组。

此示例将对 MySeries1 和 MySeries2 这两个序列进行分组。

' Group two series by week, using averaged Y values.
Chart1.DataManipulator.Group("AVE", 1, IntervalType.Weeks, "MySeries1, MySeries2")
// Group two series by week, using averaged Y values.
Chart1.DataManipulator.Group("AVE", 1, IntervalType.Weeks, "MySeries1, MySeries2");

请参见

参考

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

其他资源

数据绑定和操作