2016-09-22 165 views
0

我想用d3js强制布局表示我的数据。我有以下代码:如何使d3.js中的节点的距离强制布局更大?

<script> 
var svg = d3.select("svg"), 
     width = +svg.attr("width"), 
     height = +svg.attr("height"); 
var color = d3.scaleOrdinal(d3.schemeCategory20); 

var simulation = d3.forceSimulation() 
     .force("link", d3.forceLink().id(function(d) { return d.id; })) 
     .force("charge", d3.forceManyBody()) 
     .force("center", d3.forceCenter(width/2, height/2)); 

var jsonData = JSON.parse(data); 
var totalAmount=jsonData.total; 
d3.json("myData.json", function(error, graph) { 
if (error) throw error; 
var nodes = json.nodes; 
var link = svg.append("g") 
     .attr("class", "links") 
     .selectAll("line") 
     .data(graph.links) 
     .enter().append("line") 
     //.attr("stroke-width", function(d) { return Math.sqrt(d.value); }); 
     .attr("stroke-width",4) 

var node = svg.append("g") 
     .attr("class", "nodes") 
     .selectAll("circle") 
     .data(graph.nodes) 
     .enter().append("circle") 
     .attr("r", 5) 
     .attr("fill", function(d) { return color(d.group); }) 
     .call(d3.drag() 
       .on("start", dragstarted) 
       .on("drag", dragged) 
       .on("end", dragended)); 

node.append("title") 
     .text(function(d) { return d.id; }); 

simulation 
     .nodes(graph.nodes) 
     .on("tick", ticked); 

simulation.force("link") 
     .links(graph.links); 

function ticked() { 
    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; }); 
    } 
    }); 

    function dragstarted(d) { 
    if (!d3.event.active) simulation.alphaTarget(0.3).restart(); 
    d.fx = d.x; 
     d.fy = d.y; 
    } 

    function dragged(d) { 
     d.fx = d3.event.x; 
     d.fy = d3.event.y; 
    } 

    function dragended(d) { 
     if (!d3.event.active) simulation.alphaTarget(0); 
     d.fx = null; 
     d.fy = null; 
    } 

然而,在输出中,节点是如此接近到每个人喜欢在这张照片: My result

我检查链接是否正确(基本上我有一个源以及许多目标节点)。

如何使节点之间的距离更大?谢谢你的帮助。

+0

可以帮助:http://stackoverflow.com/questions/34355120/d3-js-linkstrength-influence-on-linkdistance-in-一个力,曲线图 – thatOneGuy

回答

0

试试这个

simulation = d3.forceSimulation() 
     .force("link", d3.forceLink().distance(value).id(function(d) { return d.id; })) 
... 

哪里value是一些数

相关问题