ChartDataSource
的ChartDataSource对象在采样场景中使用。中所示的绑定到业务对象集合之外创建数据绑定图表主题的RadChartViewComponent支持更复杂的绑定方式,允许您在绘制数据项之前将数据项组合成单个数据点(称为采样)。当图表中填充了数千个项目时,视觉表示可能不那么清晰。可能有两个或多个数据点显示的Y和X值非常接近。这时抽样就派上用场了。
您可以使用基于索引的采样或DateTime采样。
基于索引的抽样
采样引擎不检测/确定数据点是否在相似的像素坐标上。相反,它将原始数据的一个子集可视化。来确定要显示的数据点的数量SamplingThresholdChartDataSource的属性。例如,如果你有1000个点,其中95%聚集在一起,你选择300个点的采样阈值,这300个点中的95%也会聚集在一起。
例1:定义ChartDataSource
. DateTime抽样
在某些情况下,DateTime轴包含许多数据点。在这种情况下,ChartDataSource公开了两个属性来组合数据点:SamplingUnit而且SamplingUnitInterval.SamplingUnit属性是一个枚举,您可以从中进行选择,以指定您是否希望按天、小时、分钟、月、NONE(默认值)、季度、秒、周、年对数据进行组合。顾名思义,SamplingInterval属性允许您为所选的SamplingUnit提供一个间隔。默认的间隔是1,如果你想应用聚合,你需要设置更大的间隔。
下面的示例演示了这两个属性的实际操作。
我们将创建BarSeries和SplineSeries与DateTimeCategorical水平轴,通过ChartDataSource控件绑定:
示例2:定义图表并绑定采样源
< telerik: RadCartesianChart。LinearAxis/>
注意系列的ItemsSource属性是如何绑定到ChartDataSource而不是直接绑定到所谓的Data的业务对象集合的。在后台代码中创建业务对象集合,并通过继承DependencyObject类将其注册为DependencyProperty:
示例3:创建模型
公共类SimpleViewModel: DependencyObject {Random r = new Random();/// ///标识 依赖属性。/// public static readonly DependencyProperty DataProperty = DependencyProperty。寄存器("Data", typeof(ObservableCollection), typeof(SimpleViewModel), new PropertyMetadata(null));public RadObservableCollection Data {get {return (RadObservableCollection)this.GetValue(DataProperty);}设置{这个。SetValue (DataProperty值);}}公共SimpleViewModel() {var data = new RadObservableCollection();DateTime startDate = new DateTime(2013, 5,1);For (int I = 0; i < 20; i += 1) { data.Add(new SalesInfo() { Time = startDate.AddDays(i), Value = i }); } this.Data = data; } } public class SalesInfo { public DateTime Time { get; set; } public int Value { get; set; } }
公共类SimpleViewModel继承DependencyObject私有r作为New Random()' ''' '''标识 依赖性属性。''' ''' " '公共共享只读DataProperty As DependencyProperty = DependencyProperty. 'Register("Data", GetType(ObservableCollection(Of SalesInfo)), GetType(SimpleViewModel), New PropertyMetadata(Nothing)) Public Property Data() As RadObservableCollection(Of SalesInfo) Get Return CType(Me. getvalue (DataProperty), RadObservableCollection(Of SalesInfo))结束Get Set(ByVal value As RadObservableCollection(Of SalesInfo))SetValue(DataProperty, value)结束设置结束属性Public Sub New() Dim data = New RadObservableCollection(Of SalesInfo)() Dim startDate As New DateTime(2013, 5,1) For i As Integer = 0到19 data。添加(新SalesInfo(){。时间= startDate.AddDays(i), .Value = i }) Next Me.Data = data End Sub End Class Public Class SalesInfo Dim _time As Date Dim _value As Int Public Property时间作为日期时间Get Return Me。_time结束Get Set(value As DateTime) Me。_time = value结束设置结束属性公共属性值()作为Int Get Return Me。_value结束Get Set(value As Double) Me。结束设置结束属性结束类
通过将SamplingUnit设置为Day,将SamplingUnitInterval设置为5,您将看到4个类别,其中每个类别代表5天的时间段。结果如下图所示:
使用自定义聚合函数
默认情况下,RadChartView计算一个平均的给定值。但是,你可以使用不同的聚合函数,如Sum, Min, Max等。
为此,你应该继承你正在使用的特定的ChartSeries类,并覆盖以下受保护的方法来使用不同的聚合函数:
系列
重写的方法
分类系列(条系列,点系列,线系列,样条系列,区域系列和样条区域系列)
GetCategoryAggregateFunction GetValueAggregateFunction
Range系列(RangeSeries和RangeBarSeries)
GetHighAggregateFunction
金融系列(OhlcSeries和CandlestickSeries)
GetHighAggregateFunction GetLowAggregateFunction GetCloseAggregateFunction
散射*系列(ScatterPointSeries, scatterlineesseries, scattersplinesseries, scatterareasseries和scattersplineareasseries)
GetXValueAggregateFunction GetYValueAggregateFunction
Polar*系列(PolarPointSeries, polarlinesseries和polarareasseries)
GetAngleAggregateFunction GetValueAggregateFunction
雷达*系列(RadarPointSeries, radarlineesseries, radarareasseries)
GetCategoryAggregateFunction GetValueAggregateFunction
PieChart系列(馅饼系列和甜甜圈系列)
GetValueAggregateFunction
下面您将看到演示这一点的示例。注意,数据源与上一个示例中使用的数据源相同。
示例4:定义图表并绑定采样源
< telerik: RadCartesianChart。LinearAxis/>
示例5:创建自定义系列并覆盖其聚合函数
公共类MyBarSeries: BarSeries{受保护覆盖ChartAggregateFunction GetValueAggregateFunction(){返回新的ChartMinFunction();}}
公共类MyBarSeries继承BarSeries Protected重写函数GetValueAggregateFunction()作为ChartAggregateFunction返回新的ChartMinFunction()结束函数结束类
如果您正在使用NoXaml在dll中,您应该像这样将自定义系列的样式建立在默认系列的基础上
,否则将显示“没有数据要绘制”的消息。
结果如下:
DataPointSamplingInfo
图表的数据点用于绘制控件中的数据项的模型公开了DataItem属性,该属性持有对点后面的视图模型的引用。然而,当使用抽样(ChartDataSource)时,几个数据点视图模型(数据项)被组合到单个数据点中。在这种情况下DataItem属性包含类型的对象DataPointSamplingInfo.该对象包含关于组合的数据项和聚合函数返回的结果的信息。
DataPointSamplingInfo是IEnumerable,您可以使用它的索引器获取聚合的数据项。
示例6:从抽样结果中获取数据项
DataPointSamplingInfo = (DataPointSamplingInfo) DataPointSamplingInfo;对象dataItem =采样信息[0];
方法还可以获得每个轴的DataPoint的聚合值AggregateResultCollection属性的DataPointSamplingInfo。另请参阅