2012-11-14 76 views
1

我正在渲染与D3的Cluster Dendogram Example非常相似的树状结构。D3.js水平翻转图表

我需要水平翻转图表,所以父节点在右边,孩子在左边。标签上的文字不能翻转。哪些D3方法对此负责?从示例

代码:

var width = 960, 
height = 2200; 

var cluster = d3.layout.cluster() 
    .size([height, width - 160]); 

var diagonal = d3.svg.diagonal() 
    .projection(function(d) { return [d.y, d.x]; }); 

var svg = d3.select("body").append("svg") 
    .attr("width", width) 
    .attr("height", height) 
    .append("g") 
    .attr("transform", "translate(40,0)"); 

d3.json("flare.json", function(error, root) { 
    var nodes = cluster.nodes(root), 
     links = cluster.links(nodes); 

    var link = svg.selectAll(".link") 
     .data(links) 
     .enter().append("path") 
     .attr("class", "link") 
     .attr("d", diagonal); 

    var node = svg.selectAll(".node") 
     .data(nodes) 
     .enter().append("g") 
     .attr("class", "node") 
     .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }) 

    node.append("circle") 
     .attr("r", 4.5); 

    node.append("text") 
     .attr("dx", function(d) { return d.children ? -8 : 8; }) 
     .attr("dy", 3) 
     .style("text-anchor", function(d) { return d.children ? "end" : "start"; }) 
     .text(function(d) { return d.name; }); 
}); 
+0

查看http://stackoverflow.com/questions/20930401/smooth-transitioning-between-tree-cluster-radial-tree-and-radial-cluster-layo以获得调整分层布局的更多可能性。 – VividD

回答

1

在这种情况下,坐标来自于簇的布局。您可以修改布局,也可以从布局的宽度中减去.x的代码,即width - 160。您可能还需要调整text-anchor属性值。

+0

实际上,坐标不是在JSON中编码的。你可以在这里查看JSON:http://bl.ocks.org/d/4063570/flare.json – agscala

+0

啊,你当然是对的。坐标来自布局。我编辑了答案 - 其余仍然有效。 –