Sto lavorando a un grafico a bolle e ho allegato un evento su clic a ciascuno dei cerchi. Quando si fa clic su un cerchio, il grafico a bolle verrà sostituito con un nuovo grafico che rappresenta un'informazione più dettagliata.Accesso all'oggetto SVG D3 all'interno dell'evento click on
Ecco parte del codice:
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) {
return scaleX(d[2]);
})
.attr("cy", function(d) {
return scaleY(100 - d[1]);
})
.attr("r", function(d) {
return d[1];
})
.attr("fill", "#4eb157")
.attr("stroke", "#00c4d4")
.attr("stroke-width", function(d) {
return d[1]*(1-d[2]/100)*1.5;
})
.on("click", function()
{
svg.selectAll("circle")
.data(new_dataset)
.enter()
.append("circle")
.attr("cx", function(d) {
return scaleX(d[2]);
})
.attr("cy", function(d) {
return scaleY(100 - d[1]);
})
.attr("r", function(d) {
return d[1];
})
.attr("fill", "#4eb157")
.attr("stroke", "#00c4d4")
.attr("stroke-width", function(d) {
return d[1]*(1-d[2]/100)*1.5;
});
svg.selectAll("text")
.data(new_dataset)
.enter()
.append("text")
.text(function(d) {
return d[0];
})
.attr("x", function(d) {
return scaleX(d[2]);
})
.attr("y", function(d) {
return scaleY(100 - d[1]);
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "red");
});
Il problema viene quando clicco sul cerchio, l'intero grafico scompare, ma nessun nuovo grafico viene visualizzato. Ho capito che durante l'esecuzione della funzione on-click, l'oggetto svg è cambiato dal suo stato iniziale e in particolare alcune delle proprietà come baseURI, clientHeight, clientWidth ecc non sono più impostate anche se erano quando inizialmente si creava lo svg oggetto. Qui è il codice con il quale sto creando l'oggetto SVG:
var svg = d3.select("body").append("svg")
.attr("width", w)
.attr("height", h);
mia domanda è perché è il nuovo grafico non appare? Questo è dovuto alle proprietà modificate dell'oggetto svg? Cosa dovrei cambiare nella funzione "on-clic" per rendere il nuovo grafico visualizzato correttamente?
Grazie!