Tôi nhìn mẫu http://bl.ocks.org/mbostock/raw/4063570/:Làm thế nào để sử dụng chức năng đường chéo D3 để vẽ các đường cong?
Nó tạo ra dòng sáp nhập đẹp từ mục tiêu nguồn từ trái sang phải.
Trong trường hợp của tôi, tôi cần phải bố trí các nút theo cách thủ công và đặt tọa độ x, y. Trong trường hợp này, các dòng không được hợp nhất tại các nút nguồn. Đây là mã thử nghiệm mà sinh sản vấn đề này:
var data = [ {name: "p1", children: [{name: "c1"}, {name: "c2"}, {name: "c3"}, {name: "c4"}]}];
var width = 400, height = 200, radius = 10, gap = 50;
// test layout
var nodes = [];
var links = [];
data.forEach(function(d, i) {
d.x = width/4;
d.y = height/2;
nodes.push(d);
d.children.forEach(function(c, i) {
c.x = 3*width/4;
c.y = gap * (i +1) -2*radius;
nodes.push(c);
links.push({source: d, target: c});
})
})
var color = d3.scale.category20();
var svg = d3.select("#chart").append("svg")
.attr("width", width)
.attr("height", height)
.append("g");
var diagonal = d3.svg.diagonal()
.projection(function(d) { return [d.x, d.y]; });
var link = svg.selectAll(".link")
.data(links)
.enter().append("path")
.attr("class", "link")
.attr("d", diagonal);
var circle = svg.selectAll(".circle")
.data(nodes)
.enter()
.append("g")
.attr("class", "circle");
var el = circle.append("circle")
.attr("cx", function(d) {return d.x})
.attr("cy", function(d) {return d.y})
.attr("r", radius)
.style("fill", function(d) {return color(d.name)})
.append("title").text(function(d) {return d.name});
Có mẫu này tại http://jsfiddle.net/zmagdum/qsEbd/:
Tuy nhiên, có vẻ như hành vi của đường cong gần nút là trái ngược với mong muốn . Tôi muốn họ bắt đầu thẳng theo chiều ngang tại các nút và tạo một đường cong ở giữa. Có một mẹo để làm điều này?
Điều cần làm nếu tôi muốn tạo liên kết giữa hai trẻ em? Giống như đứa trẻ đầu tiên được liên kết với đứa con thứ hai trong hàng đầu tiên sau khi root? –