【发布时间】:2014-01-29 05:50:39
【问题描述】:
我们正在使用 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
]);
结果对我来说有点刺眼:
有没有一种简单的方法来简化数据,无论是使用 D3 还是其他现成的库?我想减少尖峰,但也要减少要绘制的数据量,因为它会失控。
我倾向于在 UI 级别执行此操作,而不是接触日志记录例程(即使必须传输冗余 JSON 数据。)
【问题讨论】:
-
不是您的问题的答案(想到过滤),但这里有一个使用Rickshaw 平滑时间序列数据的非常好的示例。它是建立在 D3 之上的开源软件。
-
您可以使用您正在使用的线/区域的interpolation 作为开始。
-
@ChristopherHackett,例如,数据的实际记录开始,或者它是如何传递到 javascript 接口的。
-
@LarsKotthoff:我做到了,但是当数据点多于像素时,它并没有真正的区别。没有什么可以插值的。
-
@FernOfTheAndes:是的,这就是我希望的样子:)
标签: graph d3.js time-series simplify data-manipulation