Erstellen Sie Ihre eigenen d3.scale.category20
ohne grau:
var myCategory20Colors = [
0x1f77b4, 0xaec7e8,
0xff7f0e, 0xffbb78,
0x2ca02c, 0x98df8a,
0xd62728, 0xff9896,
0x9467bd, 0xc5b0d5,
0x8c564b, 0xc49c94,
0xe377c2, 0xf7b6d2,
0xbcbd22, 0xdbdb8d,
0x17becf, 0x9edae5
].map(function(x) {
var value = x + "";
return d3.rgb(value >> 16, value >> 8 & 0xff, value & 0xff).toString();
});
var myCategory20 = d3.scale.ordinal().range(myCategory20Colors);
var original = d3.scale.category20();
console.log(original("x"), original("y"));
console.log(myCategory20("x"), myCategory20("y"));
// they produce the same result #1f77b4 #aec7e8
(I entfernt 0x7f7f7f, 0xc7c7c7,
) aus der Liste, können Sie sie mit Ihren eigenen Farben ersetzen auch.
Dann können Sie einfach auf die Daten beim Färben überprüfen.
g.append("path")
.attr("d", arc)
.style("fill", function(d) {
if(d.yourRowName == "Other") {
return "grey";
} else {
return myCategory20(d.data.age);
}
});
Können Sie nur den Teil bereitstellen, der die Pfade zeichnet? So kann ich Ihnen zeigen, wie es geht. Bitte zeigen Sie auch, wie "andere" erstellt wird. –
Ich benutze den Code von [hier] (https://bl.ocks.org/mbstock/3887235). Außer ich habe die Farbvariable auf 'd3.scale.category20' geändert. 'Other' wird in Python berechnet und mit dem Rest der Daten als weitere (letzte) Zeile übergeben. –
Ich löschte meine Antwort, sobald es dir nicht geholfen hat. Wie gesagt, der beste Ansatz besteht darin, nur eine eigene Ordinalskala zu erstellen, die die Domäne definiert. Schauen Sie sich an, was Bostock hier geschrieben hat: https://groups.google.com/forum/#!msg/d3-js/jsEmhdT9wiU/Xv3Mqql75vYJ –