Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>To update your data you will just need to select the svg elements again and rebind the data. In your example you are already selecting the <code>#barchart</code>, now you just need to rebind the data. And you can do that in the same way you did it when you first created the svg Elements. So something like this should do the trick:</p> <pre><code>var updatebar = svg.selectAll("#barchart"); .data(newdata) .transition() .duration(500) ... (etc.) </code></pre> <p>Here you can find a more detailed explaination: <a href="http://chimera.labs.oreilly.com/books/1230000000345/ch09.html#_updating_data" rel="noreferrer">http://chimera.labs.oreilly.com/books/1230000000345/ch09.html#_updating_data</a></p> <p>Update:</p> <p>Ok, unfortunately I cannot use Fiddle so I just post my working code here. As far as I could see you have a problem with your selectAll, because there is no element called <code>.effort</code>. Here is the updated code for your redraw-function:</p> <pre><code>function redraw() { var effort = []; var obj = { pfte: "20", efte: "50", qName: "Q1" }; var obj2 = { pfte: "10", efte: "13", qName: "Q2" }; effort[0] = obj; effort[1] = obj2; var newDataSet = new Object(); newDataSet.effort = effort; color.domain(d3.keys(newDataSet.effort[0]).filter(function (key) { return key !== "qName"; })); effortDataSet = newDataSet.effort; effortDataSet.forEach(function (d) { var y0 = 0; d.effortHr = color.domain().map(function (name) { return { name: name, y0: y0, y1: y0 += +d[name] }; }); d.total = d.effortHr[d.effortHr.length - 1].y1; }); state = svg.selectAll(".g") .data(effortDataSet) .attr("class", "g") .attr("transform", function (d) { return "translate(" + x(d.qName) + ",0)"; }); state = state.selectAll("rect") .data(function (d) { return d.effortHr; }) .attr("width", x.rangeBand()) .attr("y", function (d) { return y(d.y1); }) .attr("height", function (d) { //console.log(y(d.y0) - y(d.y1)); return y(d.y0) - y(d.y1); }) .style("fill", function (d) { return color(d.name); }); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload