2016-06-23 10 views
1

Ich zeichne ein einfaches Balkendiagramm mit Etiketten mit d3 und möchte in der Lage sein, das Diagramm mit neuen Daten zu aktualisieren, die mehr oder weniger Elemente als das vorhandene Diagramm haben können. Ich weiß, ich muss enter/update/exit verwenden, aber ich habe Probleme mit der Auswahl und das Update richtig funktioniert. Ich habe die Bar und die Etiketten gruppiert und wenn ich versuche, zu aktualisieren, füge ich der Gruppe einen weiteren Balken hinzu, anstatt ihn zu aktualisieren.Aktualisieren von d3 Balkendiagramm Etiketten mit neuen Daten variabler Länge

ich mit dieser Funktion bin Aktualisierung:

function updateChart(){ 
x.domain([0, d3.max(data, function(d) { return d.count; })]); 
chart = d3.select('.chart'); 

bar = chart.selectAll('g') 
     .data(data); 

// Enter… 
bar.enter().append('g') 
    .attr('transform', function(d, i) { return 'translate(0,' + (i * (barHeight+barMargin)) + ')'; }); 

bar.append('rect') 
    .attr("x", labelW) 
    .attr("height", barHeight) 
    .attr('width', 0) 
    .transition() 
    .duration(500) 
    .attr('width', function(d) { return x(d.count); }); 

// Update… 
bar.transition() 
    .duration(500) 
    .attr('width', function(d) { return x(d.count); }); 

// Exit… 
bar.exit() 
    .remove(); 
} 

Antwort

0

änderte ich ein paar Dinge:

  • in Ihrer Update-Funktion, sollte es newData sein, nicht data;
  • den Wert auf barMargin setzen;
  • hinzugefügt die bar.text der Update-Funktion.

Aber das wichtigste einen Schlüssel für die Daten zur Verfügung stellte, wie folgt aus:

.data(newData, function(d){ return d.value}); 

Hier ist die Geige: https://jsfiddle.net/gerardofurtado/fybLrujp/2/

+0

Oh, ich habe nicht die Kiwi bemerken ... geben mir ein paar Minuten –

+0

Fertig, überprüfen Sie die neue Geige (bearbeitete Antwort). Aber hör zu, das ist nur um dir zu zeigen, wie es gemacht wird, dein Code hat jetzt mehrere Probleme. Wenn Sie zum Beispiel mehrmals auf "update" klicken, sehen Sie, dass es neue Textelemente hinzufügt, die sich anhäufen. –

+0

Das erste g-Element hat 2 Sätze von Balken wegen des gleichen Problems mit den Texten. Wenn Sie mehrmals auf update klicken, haben Sie mehrere Gruppen von Balken. Ich habe gerade eine neue Geige gemacht (wieder!), Um dieses Problem zu beheben. –