Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js v4,将文本标签添加到气泡图上的气泡_Javascript_D3.js_Svg - Fatal编程技术网

Javascript d3.js v4,将文本标签添加到气泡图上的气泡

Javascript d3.js v4,将文本标签添加到气泡图上的气泡,javascript,d3.js,svg,Javascript,D3.js,Svg,我正在制作一个气泡图。这张图表正是我想要的样子。我唯一的问题是让文本出现在每个气泡的中间。 文本根本没有出现,我已经尝试了几种方法来实现它。当我检查页面时,每个圆圈内都有一个文本元素。但是,元素不会出现在页面上,尽管它嵌套在每个圆内。我正在下面粘贴我的代码。非常感谢您的帮助 let width = 600; let height = 600; let maxRadius = d3.max(data, (data) => { return data.PercentHomeless; })

我正在制作一个气泡图。这张图表正是我想要的样子。我唯一的问题是让文本出现在每个气泡的中间。 文本根本没有出现,我已经尝试了几种方法来实现它。当我检查页面时,每个圆圈内都有一个文本元素。但是,元素不会出现在页面上,尽管它嵌套在每个圆内。我正在下面粘贴我的代码。非常感谢您的帮助

let width = 600;
let height = 600;

let maxRadius = d3.max(data, (data) => { return data.PercentHomeless; })
let minRadius = d3.min(data, (data) => { return data.PercentHomeless; })

let svg = d3.selectAll('section')
           .append('svg')
           .attr('height', height)
           .attr('width', width)
           .append('g')
           .attr('transform', 'translate(0, 0)')

let colors = d3.scaleOrdinal(d3.schemePaired);

let simulation = d3.forceSimulation()
                  .force('x', d3.forceX(width/2).strength(0.5))
                  .force('y', d3.forceY(height/2).strength(0.5))
                  .force('collide', d3.forceCollide((data) => { return r(data.PercentHomeless) + 1.5; }))

let r = d3.scaleSqrt()
          .domain([minRadius, maxRadius])
          .range([15,75])

let circles = svg.selectAll('circles')
              .data(data)
              .enter()
              .append('circle')
              .attr('fill', (data) => { return colors(data.State); })
              .attr('r', (data) => { return r(data.PercentHomeless); })

circles.append('text')
  .attr("dy", ".3em")
  .attr("dx", -10)
  .attr("text-anchor", "middle")
  .text((data) => { return data.State; })
  .attr('color', 'black')
  .attr('font-size', 15)


let ticked = () => {
  circles
  .attr('cx', (data) => { return data.x })
  .attr('cy', (data) => { return data.y })
}

simulation.nodes(data)
  .on('tick', ticked)


});
在SVG中,
不是一个容器元素,也就是说,不能将文本附加到圆中。当您检查页面时,您看到圆圈元素内的文本这一事实没有任何区别:它们不会被呈现

解决方案:为文本创建单独的选择:

let texts = svg.selectAll(null)
    .data(data)
    .enter()
    .append('text')
    .text(d => d.State)
    .attr('color', 'black')
    .attr('font-size', 15)
并在勾选的功能中重新定位它们(根据需要更改它们的x和y位置):

在SVG中,
不是一个容器元素,也就是说,不能将文本附加到圆中。当您检查页面时,您看到圆圈元素内的文本这一事实没有任何区别:它们不会被呈现

解决方案:为文本创建单独的选择:

let texts = svg.selectAll(null)
    .data(data)
    .enter()
    .append('text')
    .text(d => d.State)
    .attr('color', 'black')
    .attr('font-size', 15)
并在勾选的功能中重新定位它们(根据需要更改它们的x和y位置):


但这样,标签从节点的中心开始。。通常用户更喜欢将标签写在中心。只需使用
文本锚定:middle
。但这样,标签就从节点的中心开始。。通常用户喜欢将标签写在中间。只需使用
文本锚定:中间