Javascript 在d3条形图上过滤后未重新绘制数据

Javascript 在d3条形图上过滤后未重新绘制数据,javascript,d3.js,Javascript,D3.js,我一直在尝试在条形图中添加一个过滤器。当我单击图例时,该条将被删除,但当我尝试重新激活时,该条不会被重新绘制 这是一个plnk 我似乎无法解决这个问题——如果有人能帮忙的话 谢谢 JS代码 // load the data d3.json("data.json", function(error, data) { var group = []; function updateData() { group = []; var organization = data.o

我一直在尝试在条形图中添加一个过滤器。当我单击图例时,该条将被删除,但当我尝试重新激活时,该条不会被重新绘制

这是一个plnk

我似乎无法解决这个问题——如果有人能帮忙的话

谢谢


JS代码

// load the data
d3.json("data.json", function(error, data) {
  var group = [];

  function updateData() {
    group = [];

    var organization = data.organizations.indexOf("Org1");
    var dateS = $("#selectMonth").text()

    for (var country = 0; country < data.countries.length; country++) {

      var date = data.dates.indexOf(dateS);
      group.push({
        question: data.organizations[organization],
        label: data.countries[country],
        value: data.values[organization][country][date]

      });

    }
  }

  function draw(create) {

    updateData();


    x.domain(group.map(function(d) {
      return d.label;
    }));
    y.domain([0, 100]);

    // add axis




    // Add bar chart
    var bar = svg.selectAll("rect")
      .data(group);
    if (create) {
      bar
        .enter().append("rect")
        .attr('x', function(d) {
          return x(d.label);
        })
        .attr('y', function(d) {
          return y(d.value);
        })
        .attr('width', x.rangeBand())
        .attr('height', function(d) {
          return height - y(d.value);
        });


      svg.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(0," + height + ")")
        .call(xAxis)
        .selectAll("text")
        .style("text-anchor", "end")
        .attr("dx", "-.8em")
        .attr("dy", "-.55em")
        .attr("transform", "rotate(-90)");


      svg.append("g")
        .attr("class", "y axis")
        .call(yAxis)
        .append("text")
        .attr("transform", "rotate(-90)")
        .attr("y", 5)
        .attr("dy", ".71em")
        .style("text-anchor", "end")
        .text("Value");
    }



    bar
      .transition()
      .duration(750)
      .attr("y", function(d) {
        return y(d.value);
      })
      .attr("height", function(d) {
        return height - y(d.value);
      });


    // Existing code to draw y-axis:
    var legendGroups = d3.select("#legend")
      .selectAll(".legendGroup")
      .data(group, function(d) {
        return d.label; // always try and use a key function to uniquely identify
      });

    var enterGroups = legendGroups
      .enter()
      .append("g")
      .attr("class", "legendGroup");

    legendGroups
      .exit()
      .remove();

    legendGroups
      .attr("transform", function(d, i) {
        return "translate(10," + (10 + i * 15) + ")"; // position the whole group
      });

    enterGroups.append("text")
      .text(function(d) {
        return d.label;
      })
      .attr("x", 15)
      .attr("y", 10);

    enterGroups
      .append("rect")
      .attr("width", 10)
      .attr("height", 10)
      .attr("fill", function(d) {
        return "#bfe9bc";
      })
      .attr("class", function(d, i) {
        return "legendcheckbox " + d.label.replace(/\s|\(|\)|\'|\,|\.+/g, '')
      })

    .on("click", function(d) {
      d.active = !d.active;
      d3.select(this).attr("fill", function(d) {
        if (d3.select(this).attr("fill") == "#cccccc") {
          return "#bfe9bc";
        } else {
          return "#cccccc";
        }
      })
      var result = group.filter(function(d) {
        return $("." + d.label.replace(/\s|\(|\)|\'|\,+/g, '')).attr("fill") != "#cccccc"
      })

      x.domain(result.map(function(d) {
        return d.label;
      }));

      bar
        .select(".x.axis")
        .transition()
        .call(xAxis);

      bar
        .data(result, function(d) {
          return d.label.replace(/\s|\(|\)|\'|\,|\.+/g, '')
        })
        .enter()
        .append("rect")
        .attr("class", "bar")


      bar
        .transition()
        .attr("x", function(d) {
          return x(d.label);
        })
        .attr("width", x.rangeBand())
        .attr("y", function(d) {
          return y(d.value);
        })
        .attr("height", function(d) {
          return height - y(d.value);
        });

      bar
        .data(result, function(d) {
          return d.label.replace(/\s|\(|\)|\'|\,|\.+/g, '')
        })
        .exit()
        .remove()
    });

  }
//加载数据
d3.json(“data.json”),函数(错误,数据){
var组=[];
函数updateData(){
组=[];
var organization=data.organizations.indexOf(“Org1”);
变量日期=$(“#选择月”).text()
对于(变量国家=0;国家
该条消失,因为您可以使用

            .remove()
您可以做的是在未选择该元素时隐藏该元素:

       d3.selectAll('.graph').selectAll("rect").attr("visibility", function(e) {
            return e.active ? "hidden" : "";
        })