나는과 같이, 그래프 인접성 (adjacency) 목록이 있습니다D3 포스 감독 JSON 인접성 (adjacency) 목록
{
nodes: [
{
"id": 1,
"label": "Mark
},...],
edges: [
{
"source": 1,
"target": 2
},....]
}
가장자리는 노드에서 ID를 사용!
저는 PHP를 사용하여 클라이언트 측에이 목록을 표시했습니다.
D3에서 JSON을로드 할 수 없습니다. 는 그래서 수동으로 구문 분석하려고 :
var width = window.innerWidth,
height = window.innerHeight;
var color = d3.scale.category20();
var force = d3.layout.force()
.linkDistance(40)
.linkStrength(2)
.charge(-120)
.size([width, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var nodes = [], links = [];
d3.json(null, function(error)
{
JSONData.nodes.forEach(function(node)
{
nodes.push(node);
});
JSONData.edges.forEach(function(edge)
{
links.push({source: edge.source, target: edge.target});
});
force.nodes(nodes)
.links(links)
.start();
var link = svg.selectAll(".link")
.data(links)
.enter().append("path")
.attr("fill", "none")
.attr("class", "link");
var node = svg.selectAll(".node")
.data(nodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", 5)
.style("fill", "#4682B4")
.call(force.drag);
node.append("title").text(function(d) { return d.label; });
force.on("tick", function()
{
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});
});
하지만, 내가 볼 수있는 모든 노드가 아닌 가장자리입니다. 다음과 함께 CSS 파일을 추가했습니다 :
.node {
stroke: #4682B4;
stroke-width: 1.5px;
}
.link {
stroke: #ddd;
stroke-width: 1.5px;
}
그러나 아무 소용이 없습니다. 이 문제를 해결하는 방법이 있습니까?
나는 아직도 어떤 라인도 생산하지 않을까 두려워. 링크를 보유하고 노드 ID를 참조해야하거나 노드 배열의 노드 인덱스가 필요합니까? –
문서 (https://github.com/mbostock/d3/wiki/Force-Layout#wiki-links)는 링크가 ID가 아닌 노드 배열의 INDEX로 초기화되어야한다고 말합니다. 당신이 이미 그것을 이해하기를 바랍니다. 지금 당신의 문제를 완전히 해결 했습니까? – VividD
아니요. 나는 그걸 포기하고 Sigma.js를 사용했습니다. 어쨌든 도움을 주셔서 감사합니다! –