2013-02-10 5 views
8

Dieser Kreis Pack Layout Beispiel (http://bl.ocks.org/4063269) ist für ein Projekt bin auf perfekte I, jedoch Größen es alle relativ Kreise miteinander:Kann ein Circle-Pack-Layout in d3.js mit festen Kreisgrößen verwendet werden?

enter image description here

Gibt es eine einfache Möglichkeit, feste Radien angeben für jeden Kreis?

Ich habe den Quellcode, Beispiele, google und stackoverflow durchforstet und kann nichts hilfreich finden.

Die genaue Größe der Kreise ist mir wichtig.

+0

user2058412, können Sie bitte einen Blick auf meine Antwort werfen? Ist es für dich nützlich? – VividD

Antwort

1

Wenn Sie den Code in dem Beispiel folgen Sie gab, die Größe der <circle> Elemente wird hier entschieden:

node.append("circle") 
    .attr("r", function(d) { return d.r; }) 
// ... 

die Größe der Kreise zu beheben, sagen wir, 50, können Sie dies tun:

node.append("circle") 
    .attr("r", function(d) { return 50; }) 
// ... 

aktualisieren

Dies wird howeve r, brechen Sie das Layout wie im Kommentar angegeben. Um dies zu beheben, kann man die gleiche value zu jedem Knoten bieten:

// Returns a flattened hierarchy containing all leaf nodes under the root. 
function classes(root) { 
    var classes = []; 

    function recurse(name, node) { 
    if (node.children) node.children.forEach(function(child) { recurse(node.name, child); }); 
    else classes.push({packageName: name, className: node.name, value: node.size}); 
    } 

    recurse(null, root); 
    return {children: classes}; 
} 

zu:

// Returns a flattened hierarchy containing all leaf nodes under the root. 
function classes(root) { 
    var classes = []; 

    function recurse(name, node) { 
    if (node.children) node.children.forEach(function(child) { recurse(node.name, child); }); 
    else classes.push({packageName: name, className: node.name, value: 1}); 
    } 

    recurse(null, root); 
    return {children: classes}; 
} 
+0

Danke für die Antwort! Ich habe es tatsächlich versucht, aber es bricht das Layout: http://cl.ly/image/2M3o1T2n2k1V. Die Art und Weise, wie es aussehen sollte, ist: http://cl.ly/image/1U1b3v3m152W – user2058412

+0

Die Antwort mit einem möglichen Update aktualisiert. –

6

Es ist möglich, und eine einfache Sache zu tun. Die erste Antwort ist korrekt, aber ich glaube, meine ist einfacher, expliziter, also füge ich sie auch hinzu.

Bitte nehmen Sie sich einen Blick auf dieses Beispiel: jsfiddle

Wenn Sie "Constant" Knopf drücken, werden Sie etwas sehen:

enter image description here

Der Schlüsselcode ist dieses:

pack.value(function(d) { return 100; }) 

Dadurch werden die Kreisradien unabhängig von den Daten eingestellt. 100 kann natürlich jede Konstante sein. Sie können diese Zeile in der Initialisierung des Circle Packs anwenden (am wahrscheinlichsten wird dies der Fall sein) oder die Reinitialisierung (wie in meinem Beispiel).

Hoffe, das hilft.