我有一个图表,我想根据用户的日期范围显示。此特定图表每 15 分钟有一个数据点。因此,如果用户选择较大的日期范围,每个系列可能会有很多数据点。这里有几个例子:
在第一个示例中,图表确实显示。在第二个示例中,图表不显示。有一个 Highstock 演示(包含数据分组的 52,000 个点)可以处理大量数据点。我试图将上述图表更改为 highstock 图表,但结果仍然相同。
我能做些什么来解决这个问题?
我有一个图表,我想根据用户的日期范围显示。此特定图表每 15 分钟有一个数据点。因此,如果用户选择较大的日期范围,每个系列可能会有很多数据点。这里有几个例子:
在第一个示例中,图表确实显示。在第二个示例中,图表不显示。有一个 Highstock 演示(包含数据分组的 52,000 个点)可以处理大量数据点。我试图将上述图表更改为 highstock 图表,但结果仍然相同。
我能做些什么来解决这个问题?
这是由于涡轮阈值选项:
“当一个系列包含比这更长的数据数组时,只允许使用一维数字数组或具有 x 和 y 值的二维数组。此外,仅测试第一个点,其余的被假定为相同的格式。这样可以节省昂贵的长系列数据检查和索引。”
默认设置为 1000 点。您的图表未呈现,因为您的系列中的每个点都是一个对象,并且它们的数量大于阈值。
这是一个jfFiddle演示您的情节与设置为 2000 的阈值一起工作。
这是修改后的代码部分:
plotOptions: {
spline: {
turboThreshold: 2000,
...
另一种解决方案是将您的系列数据编码为二维数组,而不是让每个点由具有 xy 属性的对象表示。
如果您使用 PHP 生成响应,则 turboThreshhold 的解决方法是这样的:
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);
}