d3:layout.stack() - 默认图层数组的精确形状

时间:2016-05-19 01:01:27

标签: d3.js

我有一个数据集,其原始形式如下所示:

12:00,1,2,3,4,5,6,7 12:15,8,9,10,11,12,13,14 ...

这是一个时间序列,有6列值。对于每个时间点,我想在d3中创建一个堆积条形图。

通过阅读d3.layout.stack()的文档,我认为'正常' stack()期望的数据形式如下:

[
    [
        { x: 12:00, y: 1 },
        { x: 12:00, y: 2 },
        ...
    ],
    [
        <repeat for time point 12:15>
    ],
    ...
]

由于我使用15分钟的间隔,外部数组将有96个元素(它跨越一天),每个内部数组将有7个元素,每个段有一个点值。

不幸的是,当我通过那个&#39;标准化&#39;数据集到d3.layout.stack(),它不起作用。

我使用以下代码生成图层:

layers.selectAll( 'rect' )
    .data( segments )
    .enter()
    .append( 'rect' )
    .attr( 'x', function ( d, i ) {
        return xScale( d[0].x );
    } )
    .attr( 'y', function ( d, i ) {
        return yScale( d[i].y0 + d[i].y );
    } )
    .attr( 'height', function ( d, i ) {
        return yScale( d[i].y0 ) - yScale( d[i].y + d[i].y0 );
    } )
    .attr( 'width', xScale.rangeBand() - 1 );

生成x值的函数调用正常工作,调用96次(每个时间点一次)。但是,生成y值的函数调用也称为96次,但是作为&#39; d&#39;参数只包含7个值,因为只有7个段。

我尝试了正常化&#39;数据,以便外部数组有7个元素,每个段一个,内部数组有96个元素,每个时间点一个。但在这种情况下,函数调用定义了&#39; x&#39;只被召唤七次。

我确定我错过了一些显而易见的事情,但我会非常感谢某些帮助或一些良好,彻底的例子。到目前为止,我用谷歌搜索过的所有内容要么留下一些东西,要么描述“形状”。数据传递给layout.stack()的单词,这对我们这些倾向于视觉学习的人没有帮助:)。

编辑

  • 数据来自对ASPNET 5 / MVC6网站的角度调用。
  • 数据中没有字段名称行。这是一个要求吗?一世 不要记得在d3文档中看到这一点。

0 个答案:

没有答案