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

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -