javascript - How to assign consistent colours to node groups in Force Network d3.js -
i trying assign specific colour specific group in force network graph. groups assigned same colours consistently across graphs. group names "a", "b", "c", "d" , assigned colour in accordance order currently.
what want, example, "a" consistently assigned blue , "b" red.
the javascript have node colouring below:
var color = d3.scale.category10(); var node = vis.selectall(".node") .data(force.nodes()) .enter().append("g") .attr("class", "node") .style("fill", function(d) { return color(d.group); }) .style("opacity", 0.9) .on("mouseover", mouseover) .on("mouseout", mouseout) .call(force.drag); any appreciated,
thank you
d3.scale.category10() (or d3.schemecategory10 in v4) works on first-come, first-served basis. means that, if don't set domain,
the domain inferred implicitly usage assigning each unique value passed scale new value range. (source)
we can show this. have @ demo, i'm using 2 color scales:
var data = ["a", "b", "c", "d"]; var color = d3.scale.category10(); var color2 = d3.scale.category10(); var body = d3.select("body") var paragraphs1 = body.selectall(null) .data(data) .enter() .append("p") .style("background-color", function(d) { return color(d) }) .html(string); body.append("br"); var paragraphs1 = body.selectall(null) .data(data.reverse()) .enter() .append("p") .style("background-color", function(d) { return color2(d) }) .html(string); p { margin: 0px; } <script src="https://d3js.org/d3.v3.min.js"></script> as can see, data doesn't matter, order.
to have color consistently assigned datum value, asked, need set domain:
var color = d3.scale.category10() .domain(["a", "b", "c", "d"]); here demo, colors same same datum:
var data = ["a", "b", "c", "d"]; var color = d3.scale.category10() .domain(data); var color2 = d3.scale.category10() .domain(data); var body = d3.select("body") var paragraphs1 = body.selectall(null) .data(data) .enter() .append("p") .style("background-color", function(d) { return color(d) }) .html(string); body.append("br"); var paragraphs1 = body.selectall(null) .data(data.reverse()) .enter() .append("p") .style("background-color", function(d) { return color2(d) }) .html(string); p { margin: 0px; } <script src="https://d3js.org/d3.v3.min.js"></script>
Comments
Post a Comment