2013-04-23 19 views
0

我有一個簡單的樹佈局示例的y值,我想有要設置的源&目標節點值預確定x和樹佈局

數據是像這樣:

var Data = {"name" : "A", "info" : "tst", "childrens" : [ 
     {"name" : "A1", x:100, y:100 }, 
     {"name" : "A2", x:50, y:400 }, 
     {"name" : "A3", x:50, y:100 }, 
     {"name" : "A311", x:350, y:120 }, 
     {"name" : "A312", x:250, y:170 }, 
     {"name" : "A312", x:175, y:200 } 

    ]}; 

正如你所看到的,我已經定義了每個節點的y值,以便將它們放在我想要的位置。

但是,它似乎對佈局沒有任何影響。

我試圖投影更改爲:

  translate(" + d.x + "," + d.y + ")" 

我也試圖改變節點變量,但它似乎有,如果我改變了它的投影效果相同。

我想知道是否可以使用treelayout來設置位置並且它是不允許的。

而且,而是採用SVG:圓我希望用svg.symbol:

node.append("path") 
     .attr("d", d3.svg.symbol().type(circle)) 
     .attr("transform", "translate(0,0)") 

但是,相反,它說明不了什麼,但線條,沒有文字 - 不明白爲什麼。

所以基本上我想給孩子&,我選擇了根的位置。

任何幫助或建議將大大appreicated。 http://jsfiddle.net/3twUr/2/

編輯:

變種線= d3.svg.diagonal()的數據(數據)。進入()

.source({x: d.x, y: d.y}) 
    .target({x: d.x, y: d.y}); 

    svg.append("path") 
     .attr("fill", "none") 
     .attr("stroke", "black") 
     .attr("d", line); 

    var pos = [{source: "A" ,target: 'A1'}, 
       {source: "A" , target: 'A2'} ]; 

回答

0

樹佈局(和大多數其他佈局)的整點它是爲你確定節點的位置。你試圖做的是完全不受支持的。

既然你有節點位置已經,這聽起來像它會更容易簡單地把符號和你想讓他們成爲線。也就是說,像

svg.selectAll("circle").data(Data.childrens) 
    .enter() 
    .append("circle") 
    .attr("cx", function(d) { return d.x; }) 
    .attr("cy", function(d) { return d.y; }); 

類似的鏈接,你需要計算自己。這聽起來像你想要將父節點鏈接到他們的孩子,所以這將是相對簡單的。

此方法還具有可自由使用任何節點/鏈接樣式的優點。

+0

嗨,感謝您的回覆。是否不可能使用svg.Diagonal來計算鏈接節點之間的距離? – Jose 2013-04-23 21:14:09

+0

線生成器僅用於連接給定的點。所以基本上給出兩個點'd3.svg.diagonal()'就足夠了,但是你必須選擇這兩個點,即爲你想要的每個鏈接創建一個兩點集合。 – 2013-04-23 21:18:18

+0

以下我的編輯有一種方法可以映射我的對象,以便通過我的數據獲取其源/位置? – Jose 2013-04-23 21:35:23