NVD3, Clear svg before loading new chart

前端 未结 6 986
無奈伤痛
無奈伤痛 2020-12-15 14:55

I have several different NVD3 charts that I call upon in the same svg. I use buttons to call functions, each containing a new chart that uses its own data.

相关标签:
6条回答
  • 2020-12-15 15:22

    You can select all the elements below the SVG with the "svg > *" selector, i.e. to remove all of those, do

    d3.selectAll("svg > *").remove();
    
    0 讨论(0)
  • 2020-12-15 15:22

    after create button put this code

    $("svg").remove()
    
    0 讨论(0)
  • 2020-12-15 15:36

    This is the one that worked for me.

    d3.selectAll("svg").remove();

    0 讨论(0)
  • 2020-12-15 15:39

    If you are developing a dashboard having multiple widget showing different d3 charts then use the following

    d3.selectAll("#d3-donutChart > *").remove(); 
    

    this will only clear the specific chart, not all the svg's in the webpage.

    Add this line just after subscribing to data in angular 2.

    0 讨论(0)
  • 2020-12-15 15:40

    This works for me:

    var svg = d3.select("svg");
    svg.selectAll("*").remove();
    
    0 讨论(0)
  • 2020-12-15 15:46
    For Re-Drawing the D3 Graphs by clearing the existing sketch and updating.
    <body>
    ...
    <input name="reDraw" type="button" value="Re-Draw" onclick="reDraw('data2.csv')" />
    ...
    
    <script>
    
    var margin = {top: 20, right: 20, bottom: 30, left: 40},
        width = 960 - margin.left - margin.right,
        height = 500 - margin.top - margin.bottom;
    
    var x0 = d3.scale.ordinal()
        .rangeRoundBands([0, width], .1);
    
    var x1 = d3.scale.ordinal();
    
    var y = d3.scale.linear()
        .range([height, 0]);
    
    var color = d3.scale.ordinal().range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);
    
    var xAxis = d3.svg.axis()
        .scale(x0)
        .orient("bottom");
    
    var yAxis = d3.svg.axis()
        .scale(y)
        .orient("left")
        .tickFormat(d3.format(".2s"));
    
    //d3.select('#chart svg')
    
    var svg = d3.select("body").append("svg")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.bottom)
        .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
    
       var updateData = function(getData){
    
        d3.selectAll('svg > g > *').remove();
    
        d3.csv(getData, function(error, data) {
          if (error) throw error;
    
          var ageNames = d3.keys(data[0]).filter(function(key) { return key !== "State"; });
    
          data.forEach(function(d) {
            d.ages = ageNames.map(function(name) { return {name: name, value: +d[name]}; });
          });
    
          x0.domain(data.map(function(d) { return d.State; }));
          x1.domain(ageNames).rangeRoundBands([0, x0.rangeBand()]);
          y.domain([0, d3.max(data, function(d) { return d3.max(d.ages, function(d) { return d.value; }); })]);
    
          svg.append("g")
              .attr("class", "x axis")
              .attr("transform", "translate(0," + height + ")")
              .call(xAxis);
    
          svg.append("g")
              .attr("class", "y axis")
              .call(yAxis)
            .append("text")
              .attr("transform", "rotate(-90)")
              .attr("y", 6)
              .attr("dy", ".71em")
              .style("text-anchor", "end")
              .text("Population");
    
          var state = svg.selectAll(".state")
              .data(data)
            .enter().append("g")
              .attr("class", "state")
              .attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; });
    
          state.selectAll("rect")
              .data(function(d) { return d.ages; })
            .enter().append("rect")
              .attr("width", x1.rangeBand())
              .attr("x", function(d) { return x1(d.name); })
              .attr("y", function(d) { return y(d.value); })
              .attr("height", function(d) { return height - y(d.value); })
              .style("fill", function(d) { return color(d.name); });
    
          var legend = svg.selectAll(".legend")
              .data(ageNames.slice().reverse())
            .enter().append("g")
              .attr("class", "legend")
              .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
    
          legend.append("rect")
              .attr("x", width - 18)
              .attr("width", 18)
              .attr("height", 18)
              .style("fill", color);
    
          legend.append("text")
              .attr("x", width - 24)
              .attr("y", 9)
              .attr("dy", ".35em")
              .style("text-anchor", "end")
              .text(function(d) { return d; });
    
        });
    
    }
    
    updateData('data1.csv');
    
    </script>
    </body>
    
    0 讨论(0)
提交回复
热议问题