javascript - D3 circle pack - 向节点添加标签

标签 javascript d3.js label circle-pack

虽然我已经看到这个问题被问过几次,但我在实现时遇到了一些麻烦。我想要做的是让 label 属性在每个圆圈内居中(如前所述 here )。我相信我会将文本属性添加到:

canvas.selectAll('circles')
    .data(nodes)
    .enter()
    .append('svg:circle')
    .attr('cx', function (d) {
        return d.x;
    })
    .attr('cy', function (d) {
        return d.y;
    })
    .attr('r', function (d) {
        return d.r;
    })
    .attr('fill', function (d) {
        return d.color;
    });

但是我很困惑为什么他们在我链接到的上一个示例中给出的说明不适用于我当前的设置。我相信是 pack 选项可能会让我失望(关于两者之间的区别),但任何进一步的例子都会有很大的帮助。谢谢!

更新

感谢您的回答/建议,我更新了the Codepen随着我的进步(因为我需要两行数据;应该已经澄清),这似乎运作良好。现在这是打包成一个圆圈 - 在一天结束时,我喜欢将它打包成实际的 #canvas 宽度/高度(这是一个矩形)。我看到了this treemap示例 - 这就是我想要的吗?

Demo of what I have so far

enter image description here

最佳答案

也许混淆是因为您不能向圆形选择添加标签(因为在 SVG 中,circle 元素不能包含 text 元素)。您需要制作一个包含圆圈和文本的 g 元素,或者为文本单独选择,例如:

canvas.selectAll('text')
    .data(nodes)
    .enter()
    .append('svg:text')
    .attr('x', function (d) {
        return d.x;
    })
    .attr('y', function (d) {
        return d.y;
    })
    // sets the horizontal alignment to the middle
    .attr('text-anchor', "middle")
    // sets the vertical alignment to the middle of the line
    .attr('dy', '0.35em')
    .text(function(d) { 
      return d.label;
    });

查看更新的演示:http://codepen.io/anon/pen/djebv

关于javascript - D3 circle pack - 向节点添加标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527618/

相关文章:

javascript - 如何动态加载/卸载css

javascript - jQuery 更改事件仅在页面加载时触发?

javascript - 比较 D3.js 中的两个时间对象

java - 从标签获取文件 - Perforce Java API

JavaScript/Firefox : "Failed to register/update ServiceWorker", 当没有使用名为 ServiceWorker 的内容时

javascript - 如何将 .txt 文件分解为数组? (本来应该可以用,但是没用)

javascript - D3.js .rangeBands() 返回 'undefined' 仅包含最后一个值?

javascript - d3JS : iterate through paths of unknown point count

Python Tkinter 从标签中删除/删除图像

javascript - d3 - 标记日历示例