Ich habe eine Kraft gerichtete Grafik mit d3.js Plugin gemacht, und ich möchte die Knoten und die Etiketten mit der unterschiedlichen Farbe je nach Gruppe, die sie gehören, färben.D3.js Kraft gerichtete Grafik, jede Gruppe andere Farbe?
I Maßstab für Farbe hinzugefügt haben:
var color = d3.scale.category20();
und Variablen zu einem Knoten hinzugefügt haben:
.style("fill", function(d) { return color(d.group); })
aber alle Knoten sind in der gleichen Farbe ..
Hier ist meine aktuelle Situation: http://jsfiddle.net/WBkw9/
vollständige Skript:
var links = [
{source: "John", target: "Mike", group: "5"},
{source: "John", target: "Janice", group: "5"},
{source: "John", target: "Caleb", group: "5"},
{source: "John", target: "Anna", group: "4"},
{source: "John", target: "Tommy", group: "3"},
{source: "John", target: "Jack", group: "2"},
{source: "John", target: "Vilma", group: "1"},
];
var nodes = {};
// Compute the distinct nodes from the links.
links.forEach(function(link) {
link.source = nodes[link.source] || (nodes[link.source] = {name: link.source});
link.target = nodes[link.target] || (nodes[link.target] = {name: link.target});
});
var color = d3.scale.category20();
var width = 960,
height = 500;
var force = d3.layout.force()
.nodes(d3.values(nodes))
.links(links)
.size([width, height])
.linkDistance(60)
.charge(-300)
.on("tick", tick)
.start();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var link = svg.selectAll(".link")
.data(force.links())
.enter().append("line")
.attr("class", "link");
var node = svg.selectAll(".node")
.data(force.nodes())
.enter().append("g")
.attr("class", "node")
.style("fill", function(d) { return color(d.group); })
.on("mouseover", mouseover)
.on("mouseout", mouseout)
.call(force.drag);
node.append("circle")
.attr("r", 8);
node.append("text")
.attr("x", 12)
.attr("dy", ".35em")
.text(function(d) { return d.name; });
function tick() {
link
.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
}
function mouseover() {
d3.select(this).select("circle").transition()
.duration(750)
.attr("r", 16);
}
function mouseout() {
d3.select(this).select("circle").transition()
.duration(750)
.attr("r", 8);
}
Was fehlt mir an unterschiedlichen Farben in jeder Gruppe?
Dies ändert nur die Färbung auf diese Weise, so dass nur der Knoten gefärbt ist und nicht der Text insgesamt. Aber das löst mein Problem nicht, http://jsfiddle.net/F2fbu/. Ich möchte, dass jede Gruppe anders gefärbt wird, jetzt scheint mir, dass ich das mit dieser Art von Daten nicht machen kann, weil ich spezifizieren muss welche Gruppe welcher Knoten ist ... – dzordz
Die Gruppe muss eine ganze Zahl sein, keine Zeichenkette. 'd3.selectAll (" Kreis "). style (" fill ", Funktion (d) {return color (9)})' änderte die Farbe aller Kreise. – user4815162342