D3.jsを使用していますが、複数のシリーズを含む面グラフのスタックレイアウトを設定するのに問題があります。私のデータには2つの可能な構造があります(それが役立つ場合)。1つは、この構造でスクリプトに供給される生データです。
var data = [{key: 'Group1', value: 37, date: '04/23/12'},
{key: 'Group2', value: 12, date: '04/23/12'},
{key: 'Group3', value: 46, date: '04/23/12'},
{key: 'Group1', value: 32, date: '04/24/12'},
{key: 'Group2', value: 19, date: '04/24/12'},
{key: 'Group3', value: 42, date: '04/24/12'},
{key: 'Group1', value: 45, date: '04/25/12'},
{key: 'Group2', value: 16, date: '04/25/12'},
{key: 'Group3', value: 44, date: '04/25/12'},
{key: 'Group1', value: 24, date: '04/26/12'},
{key: 'Group2', value: 52, date: '04/26/12'},
{key: 'Group3', value: 64, date: '04/26/12'}]
2つ目は、次のコードを使用して作成されたネストされた構造です。
pData = d3.nest()
.key(function(d) { return d.key; })
.map(data);
この構造になります:
pData = {Group1: [{date: 04/23/12, key: "Group1", value: 37},
{date: 04/24/12, key: "Group1", value: 32},
{date: 04/25/12, key: "Group1", value: 45},
...],
Group2: [{date: 04/23/12, key: "Group2", value: 12},
{etc, etc, etc}],
GroupX: [...] }
私の質問は次のとおりです。上記のデータ構造の1つ(またはいくつかのバリエーション)を使用してジェネレーターをセットアップし、次d3.layout.stack()
のようなエリアジェネレーターにデータを渡すことができるようにデータのスタック構造を作成するにはどうすればよいですか?
var areaGenerator = d3.svg.area()
.interpolate('monotone')
.x(function(d) { return x(d.date); })
.y0(h)
.y1(function(d) { return y(d.value); });