2016-10-03 15 views
0

初心者はここd3.jsの塗りつぶし属性にアクセスする方法は、私はd3.stack()(ないd3.layout.stack()ノート)を使用して、積み上げ棒グラフのサンプルを理解しようとしていますサンプルリンク:http://bl.ocks.org/mbostock/3886208(Mike Bostock製)d3.js:から:SVG族元素(積み上げ棒グラフ)

私は、それぞれが1つの 'レイヤ' /年齢グループを表す各svgグループ要素のfill属性にアクセスしようとしています。そうするために、私は「入力」の部分に少し変更を行います。console.log(seriesG);zi {_groups: Array[1], _parents: Array[1]}になったので

var seriesG = g.selectAll(".serie") 
    .data(function(){return stackedColumns;}) 
    .enter().append("g") 
     .attr("class", "serie") 
     .attr("fill", function(d) {return z(d.key); }); 

は、私が7歳の範囲のグループを表し7 SVG族元素が_groupsメンバーでアクセス可能であることを考え出しオブジェクト。

ここで、この基本的な再帰ルーチン:

seriesG._groups.forEach(function(d, i){ 
    console.log(d); 
    });
で、ブラウザ要素インスペクタコンソール(opera)に[g, g, g, g, g, g, g]と表示される各svgグループ要素にアクセスできます。私が把握しようとしているのは、 'd'データのfill属性にアクセスする正しい構文です。そして、ブラウザのコンソールを見て、 'fill'が 'd'データのメンバー属性'outerHTML'のメンバーであることを知っているので、まずこの 'outerHTML'属性にアクセスする方法を知っていなければなりません。私は、様々な構文を試みた:

  • console.log(d.attr("outerHTML"));
  • console.log(d.attr.outerHTML);
  • console.log(d.outerHTML);
  • console.log(d["outerHTML"]);

残りの二つがundefined操作している間最初の二つの試みは、Uncaught TypeError: d.attr is not a functionもたらしました。

私の質問の短いバージョンでは:d3.stack()を使用して作成された各svgグループ要素の塗りつぶしにアクセスする正しい構文は何ですか?

は私の究極の目標は、このサンプル・リンクに様々な機能の似を追加することです:http://bl.ocks.org/KatiRG/f7d064cd9c3efbc3c360

+0

、あなたは*しますforeachを実行する必要があります* * g *要素の属性にアクセスするために、この配列に追加します。ヒント@Mario Alexandroサンティーニ、 'seriesG._groups.forEach(関数(D、I){ \t d.forEach(関数(データム){ \t \tコンソールの –

+0

おかげ。log(datum); " \t} });' ... 'を表示するのに成功しましたが、まだ半分です。 fill属性にアクセスする正しい構文ですか? 'console.log(datum.attr(" fill "));' stackBarChart.html:70 Uncaught TypeError:datum.attrは関数ではありません。 '' console.log(datum.fill); 'と' console.log(datum ["fill"]); 'は_undefined操作です。 – Rickard

+0

私はあなたの目的を明確にするためにあなたの質問を修正することをお勧めします。そうであるように、あなたの疑問はあなたの '._group'アンチパターンを明確にしないようにする方法です。 –

答えて

1

まず、_groupsを使用しないでください。これは、選択オブジェクトに対してプライベートであることを意味します。 .nodes methodを使用しているはずです。

第2に、私の質問はあなたがそれらの塗りつぶしで何をしたいのですか?

seriesG.nodes().forEach(function(d){ 
    console.log(d3.select(d).attr('fill')); 
}); 

しかし、目的に応じて、あなたはこれらへのリンクを例に(あなたの鍵を知っているので、「65歳以上」ある、:

はあなたが書くしようとしているコードは、このです「45〜64歳」、などが...)、その後、任意の「キー」のためのフィル値は、単に返すことができます:あなたの* d個の*オブジェクトが配列である

z("65 Years and Over"); 
+0

私はグループで何をしたいのですか?特定の「凡例」矩形では、同じ塗りつぶしの年齢バーグループは表示されたままで、異なる塗りつぶしのバーグループは[このリンク](http://bl.ocks)と同様の機能を持つ「opacity:0」に設定されます.org/KatiRG/f7d064cd9c3efbc3c360)。しかし、クリックした凡例の「塗りつぶし」属性を年齢範囲バーグループの「塗りつぶし」と一致させることで、同じ機能を実現したいと考えています。これはサンプルリンクとは異なるアプローチです。 – Rickard

+0

これを行うには、まず、年齢層のバーグループの「塗りつぶし」属性を抽出できる必要があります。このアプローチが間違っていると思うなら、私を修正してください。私は結局初心者です。 – Rickard

+0

あなたの答えをコピーして貼り付けてください、それは動作していません。コンソールの '' d3.v4 ''には、このメッセージが表示されます。このメッセージはOperaの '' d3.v4 ''に送信されます。 min.js:6 Uncaught TypeError:r.getAttributeは関数ではありません。 ' – Rickard

関連する問題