用于WPF的Telerik UI?下载30天免费试用

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天的时间段。结果如下图所示:Rad Chart视图-图表数据源

使用自定义聚合函数

默认情况下,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中,您应该像这样将自定义系列的样式建立在默认系列的基础上 改进本文

Baidu
map