【问题标题】:NVD3, Clear svg before loading new chartNVD3,在加载新图表之前清除 svg
【发布时间】:2014-04-22 12:36:19
【问题描述】:

我在同一个 svg 中调用了几个不同的 NVD3 图表。 我使用按钮来调用函数,每个函数都包含一个使用自己数据的新图表。

有没有办法在不删除的情况下清除我的单个 svg? 我想按一个按钮来调用我的图表,但在加载新图表之前清除 svg。

使用这种图表时这不是问题...例如,调用两个multibarhorizontal 图表只会更新形状,这很好。 问题是加载两个不同的图表,如折线和条形图。

提前致谢

EDIT - 答案必须类似于 d3.select("svg").remove() 但这只是删除 svg。我只想清除它。

【问题讨论】:

  • 你试过d3.selectAll("svg > *").remove()吗?
  • 这就是答案,它有效,感谢 Lars Kotthoff。
  • 太好了,我会添加这个作为参考答案。
  • if "chart.useInteractiveGuideline(true);"已启用,即使情节已被删除,旧指南仍然存在,有人知道如何修复吗?

标签: d3.js charts nvd3.js


【解决方案1】:

您可以使用 "svg > *" 选择器选择 SVG 下方的所有元素,即要删除所有这些元素,请这样做

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

【讨论】:

  • 如何删除图表随附的相关工具提示?每次我绘制新图表时似乎都会附加更多工具提示
  • @FinbarMaginn 这完全取决于您如何实现工具提示。我建议您就此提出一个单独的问题。
【解决方案2】:

这对我有用:

var svg = d3.select("svg");
svg.selectAll("*").remove();

【讨论】:

    【解决方案3】:

    如果您正在开发具有多个显示不同 d3 图表的小部件的仪表板,请使用以下

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

    这只会清除特定图表,不会清除网页中的所有 svg。

    在订阅 Angular 2 中的数据后添加此行。

    【讨论】:

      【解决方案4】:

      这是对我有用的。

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

      【讨论】:

        【解决方案5】:

        在创建按钮后放上这段代码

        $("svg").remove()
        

        【讨论】:

          【解决方案6】:
          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>
          

          【讨论】:

          • 在您的文件夹中使用 data1.csv 和 data2.csv 试试上面的代码。谢谢,
          • 这个问题在两年前就得到了充分的回答。这真的没有添加任何东西。
          • d3.selectAll('svg > g > *').remove();
          • 这是实际答案哥们 d3.selectAll('svg > g > *').remove();
          猜你喜欢
          • 2018-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-20
          • 2021-09-07
          • 2015-05-09
          • 2012-08-03
          • 1970-01-01
          相关资源
          最近更新 更多