【问题标题】:Highcharts - gap between series in stacked area chartHighcharts - 堆积面积图中系列之间的差距
【发布时间】:2016-12-22 21:20:55
【问题描述】:

我在 Highcharts 中创建了一个堆积面积图,您可以在下图和以下 jsfiddle 中看到它:http://jsfiddle.net/m3dLtmoz/

对于您看到的差距,我有一个解决方法,即按月对每个系列的数据进行分组,以便每个系列看起来像这样:

    series: [{
        data: [
            [1464739200000,2471],
            [1467331200000,6275],
            [1470009600000,2574],
            [1472688000000,7221],
            [1475280000000,3228]
        ]}
    ]

虽然上述内容并不是我想要的,但上述系列的结构方式确实给了我最终想要的东西,那就是:

但是,我真的很想知道为什么原来的设置不能正常工作。我已经测试了其他实例,其中日期时间根据单个日期时间 x 轴值正确分组和聚合。我很困惑为什么这个特定的数据集不起作用。我尝试使用 Highstock 库中的 dataGrouping 选项,但无法有效地集成它。至于 tickInterval 无济于事,我已经搞砸了选项。我尝试在每个系列中而不是在 plotOptions 中设置“堆叠:‘正常’选项,但这没有区别。我在 github 上看到了处理堆叠面积图的问题,但似乎没有什么与我的完全匹配看到了。感谢您的帮助 - 非常感谢!

【问题讨论】:

    标签: javascript charts highcharts


    【解决方案1】:

    您在控制台中收到error。大多数系列要求数据按升序排序。堆叠与它无关,请参阅example

    不需要对数据进行排序的系列是散点图或多边形。 No error in scatter

    您应该自行对点进行排序和分组。如果您想按月份对它们进行分组,则必须在将它们放入图表之前准备好数据。下面的示例取同一日期时间的平均值。

    function groupData(unsortedData) {
        var data = unsortedData.slice();
        data.sort(function (a, b) {
          return a[0] - b[0]
        });
    
    
        var i = 1,
          len = data.length,
          den = 1,
          sum = data[0][1],
          groupedData = [[data[0][0], sum]],
          groupedData = [];
    
      for (; i < len; i++) {
        if (data[i - 1][0] === data[i][0]) {
          sum += data[i][1];
          den++;
        } else {
          groupedData.push([data[i - 1][0], sum / den]);
          den = 1;
          sum = data[i][1];
        }
      }
    
      groupedData.push([data[i-1][0], sum / den]);
      return groupedData;
    }
    

    示例:http://jsfiddle.net/e4enhw9a/1/

    【讨论】:

    • 没有第二双眼睛!感谢您的详细解答!