2012-05-31 2 views

답변

13

마이크 Bostock, 매우 우아하게 다음과 같은 솔루션을 도움 D3의 저자. g.link에 대한 스타일을 정의하십시오. 방금 g.node의 스타일을 복사했습니다. 그런 다음 "var link = ...."코드를 다음으로 대체했습니다. x 및 y 함수는 경로의 가운데에 레이블을 배치합니다.

var linkg = vis.selectAll("g.link") 
    .data(cluster.links(nodes)) 
    .enter().append("g") 
    .attr("class", "link"); 

linkg.append("path") 
    .attr("class", "link") 
    .attr("d", diagonal); 

linkg.append("text") 
    .attr("x", function(d) { return (d.source.y + d.target.y)/2; }) 
    .attr("y", function(d) { return (d.source.x + d.target.x)/2; }) 
    .attr("text-anchor", "middle") 
    .text(function(d) { 
     return "edgeLabel"; 
    }); 

텍스트 기능은 각 가장자리에 특별히 레이블을 제공해야합니다. 내 데이터를 준비하는 동안 내 텍스트 기능은 다음과 같습니다 그래서 나는 나의 가장자리의 이름을 가진 객체를 채워 :

몇 사람들은 X의의를 교환 유혹하고 Y는`의 두 번째와 세 번째 라인의
.text(function(d) { 
     var key = d.source.name + ":" + d.target.name; 
     return edgeNames[key]; 
    }); 
+0

linkg.append ("text")'조각. 제발하지 말아요, 그들은 정확합니다. D3 웹 사이트의 [Dendrogram example] (http://bl.ocks.org/mbostock/4063570)이 변경 되었기 때문에 업데이트가 있습니다. 첫 번째 줄은 다음과 같이 읽혀야합니다 :'var linkg = svg.selectAll (".link")' –