2016-07-03 3 views
0

Ich möchte ein Netzwerk mit d3.js erstellen. Ich habe einen erstellt, wie Sie unten sehen, aber ich möchte, dass die Knotengröße von der Anzahl der Verbindungen abhängt, die jeder Knoten hat (je mehr Verbindungen ein Knoten hat, desto größer ist die Größe des Knotens, umgekehrt). Unten ist der JS, den ich für die Knoten geschrieben habe.D3 Javascript Netzwerk: Wie parametriere Knotengröße mit der Anzahl der Links?

Wie ändere ich die Knotengröße mit der Anzahl der Links?

var nodes = graph.nodes.slice(), 
     links = [], 
     bilinks = []; 

    graph.links.forEach(function(link) { 
    var s = nodes[link.source], 
     t = nodes[link.target], 
     i = {}; // intermediate node 
    nodes.push(i); 
    links.push({source: s, target: i}, {source: i, target: t}); 
    bilinks.push([s, i, t]); 
    }); 

var node = svg.selectAll(".node") 
     .data(graph.nodes) 
     .enter().append("circle") 
     .attr("class", "node") 
     .attr("r", 3) 
     .style("fill", function(d) { return color(d.group); }) 

enter image description here

+0

Und was ist das Problem? Ist dir '.attr (" r ", 3)' line aufgefallen? Er legt die Radien von Kreisen auf 3 fest. Wenn Sie eine Abhängigkeit vom aktuellen Knoten benötigen, ersetzen Sie 3 durch eine Funktion, die den Radius für aktuelle Daten berechnet. –

+0

Natürlich weiß ich das. Ich brauche eine Funktion, die die Anzahl der Links jedes Knotens zählt. Und dann kann ich 3 durch diese Funktion ersetzen. Das Schreiben der Funktion ist das Problem, nach dem ich frage. – KIM

+0

Schreiben Sie etwas für mich nicht gut in SO-Format. SO ist Q & A-Site, nicht Codierungsdienst. Abstimmung zum Schließen. –

Antwort

0

Ihre Frage ist etwas unvollständig für eine konkrete Antwort (Sie genug Code zeigen sollte zu reproduzieren, was Sie tun), so ist hier eine verallgemeinerte eine Basis von Bostock klassischen example. Im Wesentlichen, einfach die Links und zählen die Anzahl der Male, die ein Knoten mit verknüpft ist. Dann diese Zählung verwenden Sie den Radius einstellen:

graph.links.forEach(function(link){ 

    // initialize a new property on the node 
    if (!link.source["linkCount"]) link.source["linkCount"] = 0; 
    if (!link.target["linkCount"]) link.target["linkCount"] = 0; 

    // count it up 
    link.source["linkCount"]++; 
    link.target["linkCount"]++;  
}); 

// use it to set radius 
var node = svg.selectAll(".node") 
    .data(graph.nodes) 
    .enter().append("circle") 
    .attr("class", "node") 
    .attr("r", function(d){ 
    return d.linkCount ? (d.linkCount * 2) : 2; //<-- some function to determine radius 
    }); 

kompletten Lauf code here.

Verwandte Themen