我有一个数据集,其原始形式如下所示:
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()的单词,这对我们这些倾向于视觉学习的人没有帮助:)。
编辑