【问题标题】:Nested SVG node creation in d3.js在 d3.js 中创建嵌套的 SVG 节点
【发布时间】:2012-07-05 18:42:45
【问题描述】:

我刚开始使用 d3js,发现我必须为要链接到背景数据结构的每个元素创建多个选择器,例如单独的选择器,例如一个用于覆盖文本和一个用于矩形的选择器,这很奇怪带注释的条形图。

svg.selectAll("rect")
.data(data)
.enter()
    .append("rect")
    .attr('y',function(d,i){return i*10;})
    .attr('height',10)
    .attr('width',function(d){return d.interestingValue})
    .fill('#00ff00');

svg.selectAll("text")
.data(data)
.enter()
    .append("text")
    .attr('y',function(d,i){return i*10;})
    .fill('#0000ff')
    .text(function(d){return d.interestingValue});

有没有更方便的方法将这些组合成一个单独的选择和 enter() 链来创建矩形和文本元素?

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    使用G (group) element。使用单个数据连接来创建 G 元素,然后附加您的 rect 和 text 元素。例如:

    var g = svg.selectAll("g")
        .data(data)
      .enter().append("g")
        .attr("transform", function(d) { return "translate(0," + i * 10 + ")"; });
    
    g.append("rect")
        .attr("height", 10)
        .attr("width", function(d) { return d.interestingValue; });
    
    g.append("text")
        .text(function(d) { return d.interestingValue; });
    

    【讨论】:

    • 而且是来自男人本人!感谢您的回复和一个很棒的图书馆。
    • 除非我使用 .data() 在子元素上设置数据绑定,否则我无法让它用于动态数据更新。使用上面的代码,对绑定到 g 的数据的更新使用原始绑定的数据重新绘制了 g 内的元素。
    • 对;将数据绑定到父元素不会自动将其传播给子元素。您需要执行以下操作之一才能将数据从父级传播到子级:数据、基准、选择、附加或插入。另请参阅我在 nested selections 上的教程。
    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多