Ciò può accadere perché le scale categorici in d3 aggiungono al dominio come nuovi dati entra in gioco. Se ogni ENTER() crea una nuova scala categorica, il dominio della scala categorica rimane lo stesso.
A titolo di esempio, si prega di prendere in considerazione questo jFiddle: http://jsfiddle.net/seldomawake/MV55j/1/ Qui, vediamo che come dati entra, aggiungiamo ad una scala categorica nel namespace globale, $colorScale
(codice specifico di seguito).
function redraw(theData) {
var localColorScale = d3.scale.category20c(); //< NOT USED HERE
var svg = d3.select("svg");
var circles = svg.selectAll("circle")
.data(theData).enter().append("circle")
var circleAttributes = circles.attr("cx", getRandomInt(50, 450))
.attr("cy", getRandomInt(50, 450))
.attr("r", function (d) { return d.value; })
.style("fill", function() { return $colorScale(getRandomInt(0, 19)); });
}
Tuttavia, se dovessimo sostituire return $colorScale(getRandomInt(0, 19))
con return localColorScale(getRandomInt(0, 19))
, non saremmo più abbiamo i dati aggiungono alla gamma della scala categorica, e che porterebbe a un uscita monocolore.
Modifica: correzione URL a jsfiddle.
Hmm, mi sembra un insetto. Dovresti presentare un problema sul sito Web D3. –
Questo potrebbe sembrare davvero stupido, ma cosa c'è X nel tuo esempio? cioè, se si 'console.log (X)' cosa restituisce? Ad esempio, se ti è capitato di inizializzare X da qualche parte, sperando di aggiornare in seguito il suo valore e usarlo nella tua funzione lassù, potrebbe esserci qualcosa di sbagliato nell'aggiornamento del valore ... quindi visualizza sistematicamente la stessa cosa. – Joum
@Joum Ho usato X per rappresentare i numeri tra 1 e 20. Avrei dovuto dirlo. –