2016-09-22 13 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

(基本的に私は1つのソースを持っています非常に多くのターゲットノード)

どのようにノード間の距離を大きくすることができますか?助けてくれてありがとう。

+0

が役立つことである。この

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

をお試しください:http://stackoverflow.com/questions/34355120/d3-js-linkstrength-influence-on-linkdistance-in- a-force-graph – thatOneGuy

答えて

0

valueは、いくつかの数

関連する問題