2016-03-31 22 views
0

javascript kullanarak bir topoloji grafiği çizdim, ancak sorun grafik görüntüsünün nasıl güzelleştirileceğidir. enter image description hereNasıl güzel topoloji grafiği

ben nasıl yapabilirim:
Hatta
enter image description here Nasıl aşağıda gibi olabilir düğümler daha olsun
ama, grafik kötü görünüyor , rastgele benim düğümler pozisyonuna zorla yönettiği verileri kullanabilir? Birisi bana neleri arayabileceğimi söyleyebilir mi?

+0

Herhangi bir öneri görüyor musunuz? – Awakening

+2

İlk adım genellikle aynı veri kümesini veya ağ topolojisini sağlar ve düzenin benzer sonuçlar üretip üretmediğine bakın. Senin durumunda iki resimde iki farklı topolojiniz var. – MarcoL

+0

İlgili cevap s/o http://stackoverflow.com/a/33199117/1494833 – r0hitsharma

cevap

6

working jsFiddle

var root = { name: "root" }; 
var hosts = [ 
    { name: "host1", type: "host" }, 
    { name: "host2", type: "host" }, 
    { name: "host3", type: "host" } 
]; 

var nodes = [root].concat(hosts); 
var links = hosts.map(function(host) { 
    return { source: root, target: host } 
}); 

hosts.forEach(function(host) { 
    var hostNum = host.name.substr(4); 
    for(var i = 0; i <= 5; i++) { 
    var vm = { 
     name: "vm-" + hostNum + "-" + i, 
     type: 'vm' 
    } 
    nodes.push(vm); 
    links.push({ 
     source: host, 
     target: vm 
    }) 
    } 
}); 

var force = d3.layout.force() 
    .size([window.innerWidth, window.innerHeight]) 
    .nodes(nodes) 
    .links(links) 
    .charge(-1500) 
    .gravity(0.1) 
    .on('tick', update) 
    .start(); 

var svg = d3.select('body') 
    .append('svg') 
    .attr({ 
    width: window.innerWidth, 
    height: window.innerHeight 
    }) 

var circles = svg.selectAll('circle') 
    .data(force.nodes()) 
circles.enter() 
    .append('circle') 
    .attr({ 
    r: function(d) { return d.type == 'vm' ? 14 : 20; }, 
    fill: '#1661FE' 
    }); 

var lines = svg.selectAll('line') 
    .data(force.links()) 
lines.enter() 
    .append('line') 
    .attr({ 
    fill: 'none', 
    stroke: '#1661FE', 
    'stroke-width': 3 
    }); 

var texts = svg.selectAll('text') 
    .data(force.nodes()) 
texts.enter() 
    .append('text') 
    .text(function(d) { return d.name; }) 
    .attr({ 
    fill: 'white', 
    'text-anchor': 'middle', 
    dy: '30' 
    }) 
    .style({ 
    'font-family': "Verdana, Helvetica, Sans-Serif", 
    'font-size': 12 
    }); 

function update() { 
    circles.attr({ 
    cx: function(d) { return d.x; }, 
    cy: function(d) { return d.y; } 
    }); 

    texts.attr({ 
    x: function(d) { return d.x; }, 
    y: function(d) { return d.y; } 
    }) 

    lines.attr({ 
    x1: function(d) { return d.source.x}, 
    y1: function(d) { return d.source.y}, 
    x2: function(d) { return d.target.x}, 
    y2: function(d) { return d.target.y}, 
    }) 
} 
+2

Bu çok çok güzel – WearyWanderer

+0

hei, cevap yok birkaç gün için üzgünüm. Ben senin demoyu deneyeceğim, çok teşekkürler – Awakening

+0

@Awakening Cool. Puanlar için teşekkürler! – meetamit