私はD3.jsを使用していますが、複数のシリーズのエリアチャートの積み上げレイアウトを設定する際に問題があります。私は私のデータの2つの可能な構造を持っています。一つは、この構造内のスクリプトに供給された生データである:D3.jsの積み重なった領域
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'}]
秒入れ子構造であり、このコードを使用して作成:
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: [...] }
を
私の質問はです:上記のデータ構造(またはいくつかのバリエーション)のいずれかを使用してd3.layout.stack()
ジェネレータをセットアップして、積み重ねたstrを作成するにはどうすればよいですか私のデータのためのucture、このような私は、これに似た領域ジェネレータにそれを渡すことができ:変更するには、まず最初にnest.entriesではなくnest.mapを使用することですので、あなたがスタックレイアウトに層の配列を養う必要があります
var areaGenerator = d3.svg.area()
.interpolate('monotone')
.x(function(d) { return x(d.date); })
.y0(h)
.y1(function(d) { return y(d.value); });
信じられないほど便利:
はここで働い例です。レスポンスありがとう! – mbeasley
非常に参考になりました、ありがとう! (データコールバックの)d.valueの前の+が数字に変換するJavascript noobs(私のような)を指摘する価値があります - [here](http://xkr.us/articles/javascript/unary)を参照してください。 -add /)。 コールバックでは、y0の値はどのように割り当てられますか?私は[this](http://pastebin.com/amjkBRYV)のコードを使って検査し、[this](http://i.imgur.com/lQFyJNL.png)の出力を得ました。 各オブジェクトは編集前後に2回記録されます。以前はcsvからのデータしか入っていませんでしたが、設定したとおりに "y0 = 0"を持ちますが、(Chromeでドリルダウンすると)yとゼロ以外のy0もあります。そこには何が起こっているのですか? – scubbo
(参考として、y0の値を操作しようとしているため、各点の値ではなく、累積の合計が表示されます) 前回の編集で複数の通知があった場合は、StackOverflowスタイル間違い! – scubbo