2016-05-24 5 views
3

Ich habe nach einer Methode gesucht, um den Wurzelknoten von meinem radialen Tilford Baum zu entfernen, aber bisher kein Glück. Ich fand eine ähnliche Frage here, aber die Antwort ist nicht spezifisch genug, um vollständig zu verstehen, wo ich d.depth > 0 verwenden muss. Ich habe versucht, diese Codezeile an Orten hinzuzufügen, die Sinn ergaben, aber nicht erfolgreich waren (z. B. node.append und .data (nodes)). Snippet Attached ist ähnlich dem Ort, den Benutzer @JSBob in der anderen Frage bezog, jede Richtung wäre hilfreich, da ich neu bei D3 bin!Radial Reingold Tilford Tree Wurzelknoten entfernen

function createVisualization(root){ 
    //if (error) throw error; 
    drawLegend(); 
    var nodes = tree.nodes(root), 
     links = tree.links(nodes); 
     console.log(nodes); 

    var link = svg.selectAll(".link") 
     .data(links) 
    .enter().append("path") 
     .attr("class", "link") 
     .attr("d", diagonal); 

    var node = svg.selectAll(".node") 
     .data(nodes) 
    .enter().append("g") 
     .attr("class", "node") 
     .attr("transform", function(d) { 
     return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; }) 
     .on("mouseover", mouseOverArc) 
     .on("mousemove", mouseMoveArc) 
     .on("mouseout", mouseOutArc); 

    node.append("circle").attr("r", 5) 
    .style("fill", function(d) { 
    if(d.size == 0) { 
     return "#8c6226"; //Brown 
    } else if(d.size == 1){ 
     return "#DC143C"; //Crimson 
    } else if(d.size == 2){ 
     return "#FFA500"; //Orange 
    } else if(d.size == 3){ 
     return "#32CD32"; //LimeGree 
    } else if(d.size == 4){ 
     return "#1E90FF"; //DodgerBlue 
    } 
    ;}) 

Antwort

0

Verwendung:

var link = svg.selectAll(".link") 
     .data(links) 
    .enter().append("path") 
     .filter(function(d) { return d.source.depth != 0}) 
     .attr("class", "link") 
     .attr("d", diagonal); 

zum Entfernen der Links zum Stammknoten und

var node = svg.selectAll(".node") 
     .data(nodes) 
    .enter().append("g") 
     .filter(function(d) { return d.depth != 0}) 
     .attr("class", "node") 
     .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; }) 

, um den Knoten Wurzel zu entfernen

Siehe Beispiel: http://plnkr.co/edit/GkXtUoAvUa6nijNCERxz?p=preview

+0

Ah, mir war die Filterfunktion nicht bekannt. Das war sehr hilfreich, Danke Tim! Follow-up-Frage, jetzt, wo ich alle Knoten größer als Tiefe = 0 anzeigen, ist es möglich, requirre meine Tiefe = 1 Knoten? Ich habe versucht, die Transformationswerte ohne Erfolg anzupassen. – Das

+0

Sie möchten alle Knoten mit einer Tiefe von 1 zusammenführen? –

0

Was @JSBOB sagt, ist, dass, wenn Sie den Kreis für den Wurzelknoten zu machen, setzen ihren Radius 0, wie unten gezeigt:

node.append("circle") 
    .attr("r", function(d) { 
     if (d.depth == 0) {//for root node depth will be 0 
     return 0;//make the circle's radius 0 for root node. 
     } else { 
     return 4.5; 
     } 
    }).style("fill", function(d) { ... }); 

Arbeitsprobe here

+0

Sie hinzufügen sollten 'if (d.depth == 0) {return ""} else return d.name;' entfernen der Titel auch –

+0

Yep ich stimme zu .. Aber @Tim im Code-Schnipsel von OP oben gibt es keinen Text Teil, so dass ich es nicht erwähnt habe. – Cyril