Ich versuche, diesen Code bl.ocks.org/mbostock/7881887 zu ändern, damit ich diese Technik verwenden kann, um eine Wortwolke anzuzeigen, wo die Kreisgröße sein würde relativ zu der Anzahl von Wörtern in einer Datei, aber mein Hauptproblem ist im Moment herauszufinden, wie man Text zu den Kreisen an erster Stelle hinzufügen kann. Entspannend kann ich sehen, was wie eine Funktion aussieht, die das im Code tut ... node.append ("text")? Also nahm ich an, ich wäre in der Lage, einen "Namen" -Wert zu "d" in der Knotenfunktion hinzuzufügen und weg würden wir gehen. Wie Sie sehen können, habe ich gerade den Namen hinzugefügt: text wobei text = "Test" zu d. Jede Hilfe, die irgendeinen Text überhaupt innerhalb oder in der Nähe von diesen Kreisen erscheinen lässt, würde sehr geschätzt werden! Ich bin eine neue D3, wie du es wahrscheinlich erzählen kannst und habe viele Abende damit verbracht, das zu googeln, um überhaupt nichts zu finden. Ich kann Beispiele für eine andere Art der Grafik sehen ... die Kraft Layout zB http://bl.ocks.org/mbostock/1093130 aber sie scheinen so verschieden ich nicht einen zum anderen :-(Wie füge ich Etiketten zu d3.js force bubble chart hinzu
anwenden könnenhier ist mein jsfiddle https://jsfiddle.net/TimBrighton/vn7reroe/1/
var width = 960,
height = 500,
padding = 1.5, // separation between same-color nodes
clusterPadding = 6, // separation between different-color nodes
maxRadius = 12;
var n = 100, // total number of nodes
m = 5; // number of distinct clusters
var color = d3.scale.category10()
.domain(d3.range(m));
// The largest node for each cluster.
var clusters = new Array(m);
var nodes = d3.range(n).map(function() {
test="Test";
var i = Math.floor(Math.random() * m),
r = Math.sqrt((i + 1)/m * -Math.log(Math.random())) * maxRadius,
d = {
name: test,
cluster: i,
radius: r,
name: "test",
x: Math.cos(i/m * 2 * Math.PI) * 200 + width/2 + Math.random(),
y: Math.sin(i/m * 2 * Math.PI) * 200 + height/2 + Math.random()
};
if (!clusters[i] || (r > clusters[i].radius)) clusters[i] = d;
console.log(d.name);
return d;
});
var force = d3.layout.force()
.nodes(nodes)
.size([width, height])
.gravity(.02)
.charge(0)
.on("tick", tick)
.start();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var node = svg.selectAll("circle")
.data(nodes)
.enter().append("circle")
.style("fill", function(d) { return color(d.cluster); })
.call(force.drag);
node.append("text")
.text(function(d) { return d.name; })
// .style("font-size", function(d) { return Math.min(2 * d.r, (2 * d.r - 8)/this.getComputedTextLength() * 24) + "px"; })
//.attr("dy", ".35em");
.attr("dx", 10)
.attr("dy", ".35em")
.text(function(d) { return d.name })
.style("stroke", "gray");
node.transition()
.duration(750)
.delay(function(d, i) { return i * 5; })
.attrTween("r", function(d) {
var i = d3.interpolate(0, d.radius);
return function(t) { return d.radius = i(t); };
});
function tick(e) {
node
.each(cluster(10 * e.alpha * e.alpha))
.each(collide(.5))
.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
}
// Move d to be adjacent to the cluster node.
function cluster(alpha) {
return function(d) {
var cluster = clusters[d.cluster];
if (cluster === d) return;
var x = d.x - cluster.x,
y = d.y - cluster.y,
l = Math.sqrt(x * x + y * y),
r = d.radius + cluster.radius;
if (l != r) {
l = (l - r)/l * alpha;
d.x -= x *= l;
d.y -= y *= l;
cluster.x += x;
cluster.y += y;
}
};
}
// Resolves collisions between d and all other circles.
function collide(alpha) {
var quadtree = d3.geom.quadtree(nodes);
return function(d) {
var r = d.radius + maxRadius + Math.max(padding, clusterPadding),
nx1 = d.x - r,
nx2 = d.x + r,
ny1 = d.y - r,
ny2 = d.y + r;
quadtree.visit(function(quad, x1, y1, x2, y2) {
if (quad.point && (quad.point !== d)) {
var x = d.x - quad.point.x,
y = d.y - quad.point.y,
l = Math.sqrt(x * x + y * y),
r = d.radius + quad.point.radius + (d.cluster === quad.point.cluster ? padding : clusterPadding);
if (l < r) {
l = (l - r)/l * alpha;
d.x -= x *= l;
d.y -= y *= l;
quad.point.x += x;
quad.point.y += y;
}
}
return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;
});
};
}
Wow, vielen Dank !! Danke Cyril und Stackoverflow. Ich bin verkauft! Ich hoffe, dir eines Tages wieder zu helfen, aber jetzt vielen Dank für deine Zeit. – TimBrighton