减少列表中数据条目的数量以进行图表可视化

时间:2015-03-11 08:14:22

标签: c# charts telerik interpolation simplification

在我目前的项目中,我必须在移动设备上的(telerik windows phone)图表控件中可视化大约30.000个条目。显示所有这些条目会减慢并阻止UI几秒钟。

我的数据源是“DataObject”的列表,其中dateAndTime是XAxis,而consumptionHT和consumptionNT是YAxis。

(有两个不同的值,因为白天消费HT已填充且消费NT为0, 对于夜间消费,NT被填充,消费HT为0.只有一个消费价值的解决方案也非常有用。)

public class DataOject
{
    public DateTime dateAndTime { get; set; }
    public float consumptionHT { get; set; }
    public float consumptionNT { get; set; }
}

我读过一些像Ramer-Douglas-Peucker算法这样的算法,但我不知道是否有更好/更高性能的解决方案来减少列表的大小而不会丢失太多的信息(如极值)。

有没有人建议如何处理这个问题? 我目前正在使用C#for Windows Universal App。

亲切的问候, 罗伯特

1 个答案:

答案 0 :(得分:0)

您可以使用SamplingFunction和SamplingThreshold来解决此问题。 假设您在图表中只需要200个数据点而不是30000个数据点,那么可以将SamplingThreshold设置为200(如下所示)

<telerikChart:RadChart.SamplingSettings>
    <telerikCharting:SamplingSettings SamplingThreshold="100" />
</telerikChart:RadChart.SamplingSettings>

您可以决定如何在图表中显示其他数据点的趋势。例如,如果您想显示错过的值(数据点)的平均值,那么您可以像下面这样做:

<telerikChart:RadChart.SamplingSettings>
        <telerikCharting:SamplingSettings SamplingFunction="Average" SamplingThreshold="200" />
 </telerikChart:RadChart.SamplingSettings>

像平均一样&#39;您可以选择SamplingFunction来选择错过的数据点的Min,Max,Sum等。