2012-09-17 72 views
14

我有一张图表,我想根据用户的日期范围显示。此特定图表每15分钟有一个数据点。因此,如果用户选择较大的日期范围,则每个系列可能会有很多数据点。以下是几个例子:Highcharts不显示具有大量数据点的系列

在第一个例子的图表显示确实。在第二个示例中,图表不显示。 Highstock演示(52,000 points with data grouping)与很多数据点一起工作。我试图将上面的图表更改为高股价图表,仍然有相同的结果。

我能做些什么来解决这个问题?

+0

你尝试过改变dataGrouping的单位?我实际上已经有了 –

+0

。但是,如果用户放大,我希望分组适用于范围。即如果图表显示大量数据并按每天间隔分组。如果用户放大到一天,我希望分组更改为15分钟的时间间隔。看看上面的highstock示例,他们使用服务器调用来根据时间跨度填充图形。我可能必须弄清楚如何获得[** Loading **](http://www.highcharts.com/component/content/article/2-news/48-loading-millions-of-points-in-highcharts )在ASP.NET MVC 3环境中工作。 – Linger

回答

23

这是由于turbo threshold选项:

“当一个系列包含一个数据数组,它是比这更长的时间,只有一个 号码的二维阵列,或具有x和y 二维阵列值,并且只有第一个点被测试,其他 被假定为相同的格式,这节省了昂贵的数据检查 和长序列索引。

默认设置为1000分。您的图表无法呈现,因为系列中的每个点都是一个对象,并且它们的数量大于阈值。

这里有一个jfFiddle展示你的情节设置为2000

这里的门槛工作的代码修改的部分:

plotOptions: { 
    spline: { 
    turboThreshold: 2000, 
    ... 

另一种解决方案是编码在2 d您的序列数据数组,而不是使用xy属性表示每个点,并使用xy属性表示对象。

+2

很好的捕获,@Linger你应该使用2d数组形式的数据,除非你有一些强大的用例来做 –

0

为turboThreshhold一种解决方法是这样的,如果你用一代PHP你的回应:

    if(count($responseObj) > 1000){ 
        $modolo = round(count($responseObj)/1000); 
        for($i = count($responseObj)-1; $i >= 0 ; $i--){ 
         if(($i % $modolo) != 0){ 
          unset ($responseObj[$i]); 
         } 
        } 
        $responseObj = array_merge($responseObj); 
       } 
相关问题