添加文字标签

时间:2017-03-02 06:33:32

标签: javascript html d3.js

我怎样才能为每个圈子添加文字标签?我的意思是我想旋转这个文字,改变颜色和类似的东西?我想在没有json的情况下获得解决方案,我希望从

获取此数据

var w = 300,
  h = 300;

var data = {
  name: "root",
  children: [{
      name: '1',
      size: 70
    },
    {
      name: '2',
      size: 90
    },
    {
      name: '3',
      size: 70
    },
    {
      name: '4',
      size: 40
    },
    {
      name: '5',
      size: 70
    },
    {
      name: '6',
      size: 20
    },
    {
      name: '7',
      size: 70
    },
  ]
}

var canvas = d3.select("#canvas")
  .append("svg:svg")
  .attr('width', w)
  .attr('height', h);

var nodes = d3.layout.pack()
  .value(function(d) {
    return d.size;
  })
  .size([w, h])
  .nodes(data);

// Get rid of root node
nodes.shift();

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', 'white')
  .attr('x', 0)
  .attr('y', 0)
  .attr('width', 6)
  .attr('height', 6);

var textLabels = text
  .attr("x", function(d) {
    return d.cx;
  })
  .attr("y", function(d) {
    return d.cy;
  })
  .text(function(d) {
    return "( " + d.cx + ", " + d.cy + " )";
  })
  .attr("font-family", "sans-serif")
  .attr("font-size", "20px")
  .attr("fill", "red");
#canvas {
  width: 300px;
  height: 300px;
  background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>


<div id="canvas"></div>

我尝试了很多东西,但没有起作用。

1 个答案:

答案 0 :(得分:2)

我不知道你的意思&#34;没有json&#34;但我修好了你的文字标签。

您在上面的代码中调用了未定义的text,我认为您打算将其附加到此处。

您需要为text标签创建一个占位符,再次遍历数据,然后附加文本。

canvas.selectAll("text")
  .data(nodes)
  .enter()
  .append("text")
  .attr("x", function(d) {
    return d.x;
  })
  .attr("y", function(d) {
    return d.y;
  })
  .text(function(d) {
    return "( " + d.x + ", " + d.y + " )";
  })
  .attr("text-anchor", "middle")
  .attr("font-family", "sans-serif")
  .attr("font-size", "10px")
  .attr("color", "black");