【问题标题】:How do I get rickshaw to aggregate data into weeks instead of days如何让人力车将数据聚合到几周而不是几天
【发布时间】:2013-04-03 15:44:00
【问题描述】:

我的 x,y 值由 unix 纪元时间(大约一年)和一个整数组成。我用这个绘制 x 轴:

        x_axis = new Rickshaw.Graph.Axis.Time
          graph: graph

结果看起来不错,但刻度线是基于日期的(我假设),而且我在周末什么都没有发生时会有所下降。我想按周汇总。人力车是否可以将同一周内所有时间的 y 值组合在一起?

这是一个有效的 jsfiddle:http://jsfiddle.net/jTmWC/

【问题讨论】:

  • 听起来这是在将数据传递给图形函数之前应该做的事情。您尚未向我们展示您从哪里获取数据或数据的格式,因此我们无法真正帮助您。
  • 我可以手动聚合到几周 - 但似乎必须发生某种对天的映射,所以我希望我可以映射到天。 (见上面的小提琴网址)
  • 您看到的“映射”实际上只是 d3 以合理的方式设置的刻度标签。它不会自行进行任何聚合。

标签: d3.js rickshaw


【解决方案1】:

您可以使用此代码每月汇总数据:

var aggregated = d3.nest()
               .key(function(d) { return (new Date(+d.x * 1000)).getMonth(); })
               .rollup(function(d) { return d3.sum(d, function(e) { return +e.y; }); })
               .entries(data)
               .map(function(d) { return {x: +d.key, y: d.values}; });

更新了 jsfiddle here。请注意,我还更改了轴的时间单位——您可能需要稍微调整一下以使其显示您想要的标签。

【讨论】:

  • 谢谢拉尔斯。我一直在寻找几周与一个月,但我可以弄清楚。嵌套、键和汇总的文档在哪里?
  • 你可以在API documentation找到他们。
【解决方案2】:

如果您不想使用 d3 来转换数据,您可以随时选择使用 underscorejs。它在大多数 javascript 项目中非常容易理解和有用。我在人力车上的截屏视频中做了完全相同的事情:http://tagtree.tv/d3-with-rickshaw-and-angular

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多