l'aggiornamento ad esempio grafico a torta sul sito bl.ocks non aggiorna gli elementi 'a posto':È possibile creare grafici a torta con coerenza dell'oggetto?
http://bl.ocks.org/j0hnsmith/5591116
function change() {
clearTimeout(timeout);
path = path.data(pie(dataset[this.value])); // update the data
// set the start and end angles to Math.PI * 2 so we can transition
// anticlockwise to the actual values later
path.enter().append("path")
.attr("fill", function (d, i) {
return color(i);
})
.attr("d", arc(enterAntiClockwise))
.each(function (d) {
this._current = {
data: d.data,
value: d.value,
startAngle: enterAntiClockwise.startAngle,
endAngle: enterAntiClockwise.endAngle
};
}); // store the initial values
path.exit()
.transition()
.duration(750)
.attrTween('d', arcTweenOut)
.remove() // now remove the exiting arcs
path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
}
Invece, appena considera il nuovo array di valore come nuovi dati e ridimensiona il grafico di conseguenza.
Ho creato un violino che dimostra la questione in modo molto semplice:
Se si preme 'add', è aggiungere un int casuale alla matrice: questo funziona come previsto.
Se si preme "Rimuovi", l'unico elemento che viene eliminato è sempre l'ultimo elemento che ha inserito la torta. In breve, si comporta come uno stack LIFO. Il comportamento atteso prevede invece la transizione dell'arco della torta pertinente.
È possibile applicare la consistenza dell'oggetto alle torte? Ho anche provato ad aggiungere una funzione chiave (non dimostrata sul violino) ma che si rompe appena (stranamente funziona bene con i miei grafici sovrapposti).
Grazie.
Potete fornire un esempio grafico di quello che vuoi dire - quello che ci si aspetta di vedere prima e dopo l'aggiunta di un nuovo elemento? Non è chiaro per me - una torta rappresenta essenzialmente il 100% di un set di dati. Quando aggiungi un nuovo elemento a un grafico a torta, tutti gli altri elementi devono ridursi proporzionalmente e anche il contrario è vero. – mccannf
Ciao mccannf, grazie per il tuo commento. Se guardi il secondo jsfiddle collegato nel mio post originale, puoi vedere che quando premi 'remove' rimuovi uno specifico elemento casuale dal set. Mi aspetto che questo particolare arco passi. Al contrario, ricolora tutti gli archi con nuovi colori e ne elimina l'ultimo inserito, non riflettendo più il set di dati sottostante. Per questo motivo, sembra che d3 non stia preservando gli indici. –
Ok, capito. Sarebbe utile qualcosa di simile a questo esempio: http://bl.ocks.org/mbostock/3888852. Qui mbostock ha assegnato un dominio di colori alle intestazioni dei dati e una legenda associata. – mccannf