图表控件中的数据分组
分组将一个序列中的连续数据点替换为一个分组的点。使用指定的公式以及使用的每个点的原始值计算每个分组的点的 X 和 Y 值。
有很多数据点时分组特别有用,这样易于在图表中发现趋势。
在对序列中的数据分组之前,确保序列中的数据按 X 值的升序排序。有关排序的更多信息,请参见对数据进行排序。
分组公式
使用 DataManipulator 对象完成分组。有两种分组类型:按轴标签分组和按间隔分组。如果要将空点作为零值点处理,请将 DataManipulator.IgnoreEmptyPoints 属性设置为**“false”**。
调用 Group 和 GroupByAxisLabel 方法时,必须指定公式。可以为某些或所有数据点的 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");
对多个序列分组
通过在 Group 或 GroupByAxisLabel 方法中指定逗号分隔的序列名称列表来对多个序列分组。
警告
如果指定输出序列,则输出序列的数目和输入序列的数目必须相同。否则,该方法将引发异常。
如果指定“*”作为输入序列,该方法将对 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