篩選資料 (Chart 控制項)
資料篩選根據一組篩選準則,移除篩選數列中的資料點或將資料點標示為空白。當您處理資料時,請記住,篩選作業可能會修改原始數列資料或將輸出儲存至輸出數列。
提示
篩選多個數列時,確定所有數列都已對齊。否則,篩選方法會擲回例外狀況。如需詳細資訊,請參閱對齊資料。
篩選資料
下列是 DataManipulator 類別中用於篩選的屬性和方法:
FilterSetEmptyPoints 屬性
指定要將資料點從數列移除還是將其標示為空點。FilterMatchedPoints 屬性
指定是否要移除符合準則的資料點。如果設為 false,則會篩選不符合篩選準則的資料點。這個屬性只適用於 Filter 方法。
Filter 方法
使用日期或時間範圍、將資料點值與數值做比較,或某個自訂使用者定義準則,來篩選數列的資料點。FilterTopN 方法
篩選數列的所有資料點,但數列中具有最大或最小值的資料點除外。
依日期或時間範圍篩選
當資料點的 X 值為日期 (數列的 Series.XValueType 屬性設為 DateTime) 時,使用 Filter 方法,依日期或時間範圍進行篩選。數列資料會在定義的範圍項目經過篩選之處分割為多個範圍。若要定義日期範圍,請指定兩個參數:
DateRangeType 類別中的範圍類型。
具有範圍項目的字串。這個字串可以包含逗號和虛線。例如,"1-10, 20, 25"。
下列程式碼會從一個名為 "MySeries" 的數列中篩選所有週末資料點,然後將除了每月一號外的所有資料點移除。
With Chart1.DataManipulator
' Remove weekends.
.Filter(DateRangeType.DayOfWeek, "0,6", "MySeries")
' Remove all days of month except of the first. Our
' criteria is the first of each month, and we are
' filtering points that DO NOT match the criteria.
.FilterMatchedPoints = False
.Filter(DateRangeType.DayOfMonth, "1", "MySeries")
End With
DataManipulator myDataManip = Chart1.DataManipulator;
// Remove weekends.
myDataManip.Filter(DateRangeType.DayOfWeek, "0,6", "MySeries");
// Remove all days of month except of the first. Our
// criteria is the first of each month, and we are
// filtering points that DO NOT match the criteria.
myDataManip.FilterMatchedPoints = false;
myDataManip.Filter(DateRangeType.DayOfMonth, "1", "MySeries");
篩選除了極值外的所有資料
使用 FilterTopN 方法篩選數列中的所有資料點,但具有最大或最小資料點值的指定資料點數除外。若要使用這種方法,請指定下列準則:
要保留的資料點總數。
要篩選的 Y 值。例如,"Y2"。預設值為第一個 Y 值 ("Y")。
是否要取得上界值。如果設為 False,FilterTopN 會保留最小值。預設值為 True。
下列程式碼示範如何使用 FilterTopN 方法。
With Chart1.DataManipulator
' Get the top 10 sales persons, and overwrite the
' original series data with the new data.
' We assume the first Y value of the points stores
' the sales values.
.FilterTopN(10, "MySeries")
' Get the 5 points with the smallest X values.
' The filtered data is stored in an output series.
.FilterTopN(5, "MySeries", "ResultSeries", "X", False)
End With
DataManipulator myDataManip = Chart1.DataManipulator;
// Get the top 10 sales persons, and overwrite the
// original series data with the new data.
// We assume the first Y value of the points stores
// the sales values.
myDataManip.FilterTopN(10, "MySeries");
// Get the 5 points with the smallest X values.
// The filtered data is stored in an output series.
myDataManip.FilterTopN(5, "MySeries", "ResultSeries", "X", false);
依值篩選
使用 Filter 方法,依值比較來篩選。指定下列參數:
CompareMethod 類別中的比較方法。
比較的常數值。
要篩選的 Y 值。例如,"Y2"。預設為第一個 Y 值 ("Y")。
下列程式碼示範如何與常數做比較來篩選資料點。
With Chart1.DataManipulator
' Filtered points are only marked as empty.
.FilterSetEmptyPoints = True
' Filters all points where the first Y value is greater than 100.
' The input series is overwritten with the filtered data.
.Filter(CompareMethod.More, 100, "MySeries")
' Filters all points where the X value is less than, or equal to, a specific date.
' The resulting data is stored in an output series, preserving the original data.
.Filter(CompareMethod.LessOrEqual, DateTime.Parse("1/1/2001").ToOADate(), "MySeries", "ResultSeries", "X")
End With
DataManipulator myDataManip = Chart1.DataManipulator;
// Filtered points are only marked as empty.
myDataManip.FilterSetEmptyPoints = true;
// Filters all points where the first Y value is greater than 100.
// The input series is overwritten with the filtered data.
myDataManip.Filter(CompareMethod.More, 100, "MySeries");
// Filters all points where the X value is less than, or equal to, a specific date.
// The resulting data is stored in an output series, preserving the original data.
myDataManip.Filter(CompareMethod.LessOrEqual, DateTime.Parse("1/1/2001").ToOADate(), "MySeries", "ResultSeries", "X");
使用自訂準則篩選
使用 IDataPointFilter 介面來定義自訂準則。這個介面會公開決定要移除之資料點的 FilterDataPoint 方法。下列是 FilterDataPoint 方法的參數及其傳回值:
要篩選的資料點物件。
資料點所屬的數列。
Series.Points 集合物件中資料點的索引。
如果應該篩選資料點則傳回 True,否則傳回 False。
下列程式碼示範如何利用使用者定義準則來篩選資料點。
' Filters points using custom criteria.
Dim filter As New MyPointFilter()
Chart1.DataManipulator.Filter(filter, "MySeries")
' User defined filtering criteria. Filters all points with
' Y values greater than 100 or less than 10.
Public Class MyPointFilter Implements IDataPointFilter
Private Function FilterDataPoints(ByVal point As DataPoint, ByVal series As Series, ByVal pointIndex As Int32) _
As Boolean Implements IDataPointFilter.FilterDataPoint
If point.YValues(0) > 100.0 Or point.YValues(0) < 10.0 Then
FilterDataPoints = True
Else
FilterDataPoints = False
End If
End Function
End Class
MyPointFilter filter = new MyPointFilter();
Chart1.DataManipulator.Filter(filter, "MySeries");
// User defined filtering criteria. Filters all points with
// Y values greater than 100 or less than 10.
public class MyPointFilter : IDataPointFilter
{
private bool FilterDataPoints(DataPoint point, Series series, Int32 pointIndex)
{
if((point.YValues(0)>100) || (point.YValues(0)<10))
{
FilterDataPoints = true;
}
else
{
FilterDataPoints = false;
}
}
}
篩選多個數列
透過在輸入數列字串中指定數列名稱的逗號分隔清單,篩選多個數列。每個數列中的所有資料點都會根據清單中的第一個數列來篩選。換句話說,如果第一個數列中具有某個索引的資料點已移除,則所有數列中具有相同索引的資料點也會移除。
請參閱
參考
System.Windows.Forms.DataVisualization.Charting
System.Web.UI.DataVisualization.Charting