如何迭代绘制堆积条形图?

时间:2017-05-13 00:23:25

标签: javascript d3.js

所以我在数组中有时间序列数据,如下所示:

var data = [

[{date: 2016-01-01 00:00:00, value: 52}, 
{date: 2016-01-02 00:00:00, value: 23},
{date: 2016-01-03 00:00:00, value: 42},
{date: 2016-01-04 00:00:00, value: 12,
...
],
[{date: 2016-01-01 00:00:00, value: 12}, 
{date: 2016-01-02 00:00:00, value: 42},
{date: 2016-01-03 00:00:00, value: 35},
{date: 2016-01-04 00:00:00, value: 11},
...
],
...
]

其中data [i]表示作为整个数据阵列一部分的组件的时间序列(数据在每天00:00:00收集)。

我想要做的是为每个{date,value}对象创建一个堆积条形图,以便您看到代表data[0]的部分,代表data[1], ..., data[data.length-1]的部分。

在d3中这样做的最佳方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

以下是您可能考虑的只需要javascript和svg的方法的大纲:

  1. 从每个日期值中减去一些常数较早的日期值,例如,unix系统使用1970年1月1日来计算时间差值,以便您的时间值成为一系列整数。

  2. 在您的html中,指定一个div,例如:

    <div id="data_display"></div>
    
  3. 在你的脚本中(这里不完整,但只是为了得到基本想法):

    var dd = document.getElementByID("data_display");
    dd.innerHTML = "<svg width='" + data.length + "' height='100'>"
    for (i = 0; i < data.length; i++) {
       dd.innerHTML += "<rect x='" + data[i] + "' y='...
    }
    dd.innerHTML += "</svg>"
    

    在这里,您只需使用数据结构中的适当参数填充每个svg矩形的x,y,宽度和高度。您还可以为矩形设置填充,描边颜色等,以及添加其他svg对象(如文本和线条等)以完成图表。