2017-12-07 4 views
0

は、私はちょうど私が色を変更することができれば、例えばD3放射状の木のハイライト・パス

https://bl.ocks.org/mbostock/4063550

マイク・ボストックにより株式ラジアルツリーのストロークのパスの色を変更に関する簡単な質問を持っています以下のようなサブリンクで:

var link = g.selectAll(".link") 
    .data(root.descendants().slice(1)) 
    .enter().append("path") 
     .attr("class", "link") 
     .style("fill", "none") 
     .attr("d", function(d) { 
     return "M" + project(d.x, d.y) 
      + "C" + project(d.x, (d.y + d.parent.y)/2) 
      + " " + project(d.parent.x, (d.y + d.parent.y)/2) 
      + " " + project(d.parent.x, d.parent.y); 
     }); 


    link.attr('stroke', function(d) { 
     if (d.id.startsWith("Root.Item1")){ 
      return "#386eff"; 
     } 

     if (d.id.startsWith("Root.Item2")){ 
      return "#45cbf2"; 
     } 
     else return '#70f2ad'; 
     }); 

これはRoot.Item2

すなわちで始まるデータのためのすべてのリンクの色を変更しますRoot.Item2.Child1とRoot.Item2.Child2

は同じ色になります。

しかし、Root.Item2.Child2のパスのみを強調表示し、他のリンクを同じ色のままにしたい場合はどうすればよいですか?

概念は、ルートで始まりChild2で終わるパスをハイライトするようなものですか?

おかげ

+0

データオブジェクト 'd'には、' depth'プロパティを持つ 'source'プロパティが含まれている必要があります。条件付きで任意の深度を強調表示することができます。 –

答えて

0

私は、ノードのd.childrenをチェックすることにより、遠回しにこれを理解することができました。理想的かどうかは分かりませんが、他の誰かが同様のことをしたい場合はうまくいきます。

if (d.id.startsWith("Root.Item2")) { 
       for (var i = 0; i < d.children.length; i++) { 
        if (d.id.startsWith("Root.Item2.Child1") | 
        ) { 
         return "red"; 
        } 
       } 
関連する問題