简化在D3.js面积图中绘制的时间序列JSON数据

时间:2014-01-29 05:50:39

标签: graph d3.js time-series simplify data-manipulation

我们使用D3.js在堆积面积图上显示时间序列数据(计算资源的利用率,每月小时采样数):

  d3.json("/growth/instance_count_1month.json", function( data ) {

    data.forEach(function(d) {
      d.datapoints = d.datapoints.map(
        function(da) {
          // NOTE i'm not sure why this needs to be multiplied by 1000
          return {date: new Date(da[1] * 1000),
                  count: da[0]};
      });
    });

    x.domain(d3.extent(data[0].datapoints, function(d) { return d.date; }));
    y.domain([0,
              Math.ceil(d3.max(data.map(function (d) {return d3.max(d.datapoints, function (d) { return d.count; });})) / 100) * 100
             ]);

结果对我的口味相当尖锐:

enter image description here

使用D3或其他现成的库,是否有简单的方法来简化数据?我想减少尖锐感,但也要减少要绘制的数据量,因为它会失控。

我倾向于在UI级别执行此操作,而不是触及日志记录例程(即使必须传输冗余的JSON数据。)

1 个答案:

答案 0 :(得分:0)

您有多种选择,您需要确定您拥有的数据类型及其使用需求的最佳前进方式。在不了解您的数据的情况下,我建议的最佳方法是重新采样。只需以较长的间隔报告数据(“卷起”数据)。或者,您可以使用滚动平均值或查看各种线平滑算法。