如何在d3中用附带的文本更新条形图?

因子

我正在创建条形图,作为d3中更大的数据可视化的一部分。我希望能够在可视化的一部分中更改数据,并且所有图表都将更新。图表的简化版本如下。

var dataset = [1, 3, 5, 3, 3];

...
var svg = d3.select("body #container").append("svg")
        .attr("width", width)
        .attr("height", height);

    var g = svg.append("g");
...

我使用此svg元素创建其他图表,例如地图,圆形等。条形图是这样实现的。

 function bars(dataset) {
      var barChart = g.selectAll("rect.bar")
        .data(dataset)
        .enter();

      barChart.append("rect")
        .attr("class", "bar")
        .attr("x", function(d, i) { return i * 30 + 100; })
        .attr("y", function(d) { return (height - 130) - d * 4;})
        .attr("width", 25)
        .attr("height", function(d) { return d * 4; });


       barChart.append("text")
        .text(function(d) { return d; })
        .attr("x", function(d, i) { return i * 30 + 103; })
        .attr("y", function(d) { return (height - 130) - d/10 - 5;})
        .attr("font-family", "sans-serif")
        .attr("font-size", "10px")
        .attr("fill", "darkgray"); 
}

现在,这使条形图很好,但是有一个功能

...
.on("click", function() {
   ...
   var newdata = [5, 2, 6, 2, 4]; // new values
   g.selectAll("rect.bar").remove();  // This removes the bars
   g.selectAll("text").remove();    // Problem here: All texts are removed
   bars(newdata);
}

我尝试使用.remove()函数将条形图转换为新值。这适用于条形矩形,因为没有其他条形图,但是当我尝试删除上面显示的值标签时,所有其他文本元素也被删除了。有没有一种方法只能更新与条形相关的文本?

里查德韦斯特纳拉

您是否尝试过将一个类应用于文本并仅选择要删除的那些类?例如

barChart.append("text")
  .attr('class','label')
  .text(function(d) { return d; })

然后

g.selectAll(".label").remove();

顺便说一句,如果不是在更新之间删除所有元素,那么您不是考虑删除所有元素,而是考虑使用新数据enter()并将exit()其绑定到现有元素,而仅删除发生变化的元素吗?

编辑像这样:

function bars(dataset) {
  var bar = g.selectAll(".bar").data(dataset);

  bar.exit().remove();

  bar.enter().append("rect").attr("class", "bar");

  bar
    .attr("x", function(d, i) { return i * 30 + 100; })
    .attr("y", function(d) { return (height - 130) - d * 4;})
    .attr("width", 25)
    .attr("height", function(d) { return d * 4; });

  var label = g.selectAll(".label").data(dataset);

  label.exit().remove();

  label.enter().append("text").attr("class", "label");

  label
    .text(function(d) { return d; })
    .attr("x", function(d, i) { return i * 30 + 103; })
    .attr("y", function(d) { return (height - 130) - d/10 - 5;})
    .attr("font-family", "sans-serif")
    .attr("font-size", "10px")
    .attr("fill", "darkgray"); 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 d3 v4 中制作可点击的过渡条形图?

来自分类Dev

如何在 d3 中绘制镜像 x 轴(倒置)条形图?

来自分类Dev

如何在D3的条形图中的条形图中添加文本图例?

来自分类Dev

如何在d3.js中更新条形图?

来自分类Dev

D3分组条形图:如何旋转x轴刻度线的文本?

来自分类Dev

如何在d3中的分组条形图数据的右侧显示第二个y轴

来自分类Dev

在D3中更新条形图以生成多个图表

来自分类Dev

在d3中更新条形图以生成多个图表

来自分类Dev

缩放D3中堆积的条形图?

来自分类Dev

D3 条形图镜像

来自分类Dev

如何在d3条形图中的单个条形中添加值

来自分类Dev

带有条形图的d3堆叠式条形图不会在过渡中更新

来自分类Dev

尝试更新d3.js中的条形图

来自分类Dev

尝试更新d3.js中的条形图

来自分类Dev

D3 v4 更新条形图不绘制最后一个条形图

来自分类Dev

如何在 Python3 中制作条形图?

来自分类Dev

D3条形图需要在特定条形图中添加箭头和文本

来自分类Dev

如何在d3.js中创建分层条形图

来自分类Dev

如何在d3.js中创建动态条形图?

来自分类Dev

如何在matplotlib中绘制伪3d条形图?

来自分类Dev

如何制作可点击的过渡条形图以在 d3 v4 中显示 3 个图形?

来自分类Dev

用灰色回填D3条形图以显示100%与实际的对比

来自分类Dev

d3使用selection.join更新堆叠的条形图

来自分类Dev

单击按钮时动态更新样式,D3条形图

来自分类Dev

D3使用jQuery $(this)选择器更新条形图

来自分类Dev

D3 在数据更新时删除先前的条形图

来自分类Dev

D3条形图到堆积条形图

来自分类Dev

如何根据对象中的数据动态地向条形图添加图例 (d3)

来自分类Dev

D3带时间的堆积条形图

Related 相关文章

热门标签

归档