2012-03-06 17 views
20

私は非常に単純な連想配列にデータを読み込んで棒グラフで表示する非常に単純なD3の例があります。連想配列をD3のデータとして使用

私はこの方法を使用して表示するものは何も得られないようです。代わりに、私は間にタスクを挿入する必要があります:データを連想配列に読み込み、そのデータを単純な配列にコピーし、単純な配列を使って棒グラフを表示します。

chart.selectAll("div") 
    .data(genreAssociative) 
    .enter().append("div") 
    .style("width", function(d) { return d * 10 + "px"; }) 
    .text(function(d) { return d; }); 

上記は機能しません。

genreSimple = []; 
for (var genre in genreAssociative) genreSimple.push(genreAssociative[genre]);   
chart.selectAll("div") 
    .data(genreSimple) 
    .enter().append("div") 
    .style("width", function(d) { return d * 10 + "px"; }) 
    .text(function(d) { return d; }); 

上記はありません。単純な配列を仲介として使用します。連想配列ではなく、標準配列で反復処理する特別な方法はありますか?

+0

これは、含まれている情報から、chart.data関数がjavascriptオブジェクト(別名「連想配列」)を受け入れないことがわかります。この場合、配列に変換する以外に選択肢はありません。 – jbabey

+0

JavaScriptでは連想配列と呼ばれていません。私はこの用語でハングアップする傾向があります。なぜなら、通常、連想配列の人はPHPのように配列として宣言するからです。 –

答えて

32

機能d3.valuesまたはd3.entriesを使用して、連想配列で直接操作できます。属性を設定する関数(例:function(d) { return d.value; })で考慮する必要があります。

+0

このソリューションは完全には機能しませんでしたが、正しい方向に私を指摘しました。 ".data(genreAssociative)"を ".data(d3.values(genreAssociative))"に置き換えると、データが正しく表示されるようになりましたが、残念ながらキー情報が失われてしまいます。例)。 – Crummy

+1

'.data(d3.entries(genreAssociative))'を使ってみましたか? –

+0

はい、しかし私はキーにアクセスでき、値にはアクセスできません。バーグラフでは、バーの長さの値とラベルのキーが必要です。 – Crummy

2

棒グラフの生成がうまくいくためには、次の形式が最適です。これは、D3の解析後のCSV形式に基づいています。

var dataSet1 = [ 
    {xCoordinate: "Legend String 1", magnitude: 54, link: "http://www.if4it.com"}, 
    {xCoordinate: "Legend String 2", magnitude: 21, link: "http://www.if4it.com/glossary.html"}, 
    {xCoordinate: "Legend String 3", magnitude: 31, link: "http://www.if4it.com/resources.html"}, 
    {xCoordinate: "Legend String 4", magnitude: 14, link: "http://www.if4it.com/taxonomy.html"}, 
    {xCoordinate: "Legend String 5", magnitude: 19, link: "http://www.if4it.com/disciplines.html"}, 
    {xCoordinate: "Legend String 6", magnitude: 47, link: "http://www.if4it.com"}, 
    {xCoordinate: "Legend String 7", magnitude: 27, link: "http://www.if4it.com/glossary.html"}]; 

この形式では、座標、大きさ、凡例、およびHTMLリンクを相互に関連付けることができます。

実例は、http://bl.ocks.org/2164562にあります。