javascript - 如何在气泡图中定位文本?

标签 javascript d3.js

使用 d3.js v3,我制作了这个气泡图:

d3.json(JSON_URL, function(data) {

    data = JSON.parse(data)
    var nodes = pack.nodes(data);
    var node = canvas.selectAll(".node")
        .data(nodes)
        .enter()
        .append("g")
            .attr("class", "node")
            .attr("transform", function (d) { return "translate(" + d.x + ","+ d.y + ")" ;});

    node.append("circle")
        .attr("r", function(d) {return d.r; })
        .attr("fill", function (d, i) {return d.children ? "#fff" : color(i)})
        .attr("opacity", 0.25)
        .attr("stroke-width", "2");


    node.append("text")
        .text(function(d) {return d.children ? "" : d.name ;})
        .attr("text-anchor", "middle")
        .attr("class", "nodetext")
        .attr("data-classname", function(d) {return d.className;})
        .attr("style", function(d) {return "font-size:" + d.r/4;})
        .on("click", function(d) { window.open("https://twitter.com/hashtag/" + d.name.trim() + "\?src=hash"); })
        .on("mouseover", function(d) {
              d3.select(this).attr("r", 10).style("fill", "#2f4cff");
              d3.select(this).style("cursor", "pointer"); 

            })                  
        .on("mouseout", function(d) {
          d3.select(this).attr("r", 5.5).style("fill", "#000");
        });



    //problem here    
    node.append("text")
        .text(function(d) {return d.children ? "" : d.value ;})
        .attr("text-anchor", "middle")
        .attr("class", "nodevalue")
        .attr("data-classname", function(d) {return d.className;})
        .attr("style", function(d) {return "font-size:" + d.r/4;});

}) ;

一切都很好,预计 d.value 的文本会与 d.name 的文本重叠,而我希望它们位于 d.名称。结果应该是这样的:

enter image description here

我尝试调整 nodevalue 类,但它并没有影响文本的位置。

我怎样才能实现这个目标?

最佳答案

您可以使用y 属性垂直放置文本。您的代码有点难以测试,因为我们无法访问您的 json,因此盲目地,文本部分的代码将是:

node.append("text")
    .text(function(d) {return d.children ? "" : d.name ;})
    .attr("text-anchor", "middle")
    .attr("class", "nodetext")
    .attr("data-classname", function(d) {return d.className;})
    .attr("style", function(d) {return "font-size:" + d.r/4;})
    .on("click", function(d) { window.open("https://twitter.com/hashtag/" + d.name.trim() + "\?src=hash"); })
    .on("mouseover", function(d) {
          d3.select(this).attr("r", 10).style("fill", "#2f4cff");
          d3.select(this).style("cursor", "pointer"); 

        })                  
    .on("mouseout", function(d) {
      d3.select(this).attr("r", 5.5).style("fill", "#000");
    });

node.append("text")
    .text(function(d) {return d.children ? "" : d.value ;})
    .attr("text-anchor", "middle")
    .attr("class", "nodevalue")
    .attr("y", 15) // adding y attribute to offset vertically your text
    .attr("data-classname", function(d) {return d.className;})
    .attr("style", function(d) {return "font-size:" + d.r/4;});

关于javascript - 如何在气泡图中定位文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51377039/

相关文章:

javascript - 无法形成 promise 链

javascript - 通过扩展运算符中的变量传递对象属性

javascript - D3.js:使用 origin() 函数按组中包含的元素拖动组 ('g' 中的所有内容

svg - 如何在 d3.svg.arc() 中设置大弧或扫描标志

d3.js - 在 D3 中平移、缩放 Canvas 以及拖动节点

javascript - dimplejs 线系列工具提示定制

javascript - 在弹出窗口中填充来自 groovy Controller 的数据

javascript - 如何在页面重新加载时保持菜单状态

javascript - 我可以在 JavaScript 对象上创建一个每次被引用时都是新的属性吗?

javascript - 如何用图像而不是颜色填充 D3 SVG?