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
。但这样,标签就从节点的中心开始。。通常用户喜欢将标签写在中间。只需使用文本锚定:中间
。