web-dev-qa-db-ja.com

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; });

上記は行います。単純な配列を仲介として使用します。標準配列の代わりに連想配列を反復処理する特別な方法はありますか?

21
Crummy

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

33
Lars Kotthoff

棒グラフの生成がうまく機能するためには、次の形式が最適であることがわかりました。これは、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