Фильтрация данных
В ходе фильтрации точки данных удаляются из ряда или помечаются как пустые на основании набора условий фильтрации.Во время работы с данными учитывайте, что операция фильтрации может изменить исходные данные ряда или сохранить выходные данные в выходной ряд.
Внимание! |
---|
Во время фильтрации нескольких наборов убедитесь, что все ряды выровнены.В противном случае метод фильтрации создает исключение.Дополнительные сведения см. в разделе Выравнивание данных. |
Фильтрация данных
Для фильтрации используются следующие свойства и методы класса DataManipulator.
Свойство FilterSetEmptyPoints
Указывает, удаляются ли точки данных из ряда или помечаются как пустые.Свойство FilterMatchedPoints
Указывает, удаляются ли точки данных, удовлетворяющие условию.Если задано значение false, то фильтруются точки, которые не удовлетворяют условию фильтрации.Это свойство применяется только к методу Filter.
Метод Filter
Фильтрует точки данных ряда по диапазону даты или времени, путем сравнения точки данных с числовым значением или по другим определяемым пользователем критериям.Метод FilterTopN
Фильтрует точки данных ряда, за исключением точек с самыми большими или самыми маленькими значениями в ряду.
Фильтрация по диапазонам даты или времени
Метод Filter используется для фильтрации по диапазонам даты или времени, когда значения X точек данных представляют даты (свойство Series.XValueType ряда имеет значение DateTime).Данные ряда разбиваются на диапазоны, в которых фильтруются определенные элементы.Чтобы определить диапазон дат, укажите два параметра.
Тип диапазона в классе 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