У меня проблема с круговой диаграммой D3, где метки обрезаются при их появлении. Вот картинка:
Я новичок в D3 и не уверен, где именно должно быть исправление. Логика для построения круговой диаграммы - 400 строк, поэтому я сделал пастинный блок: https://pastebin.com/32CxpeDM
Может, проблема в этой функции?
function showDetails(layer, data) {
active.inner = !active.inner
active.outer = false
let lines = guideContainer.selectAll('polyline.guide-line-inner')
.data(pie(data.inner))
let text = guideContainer.selectAll('.inner-text')
.data(pie(data.inner))
if (active.inner) {
// LINES
lines.enter()
.append('polyline')
.attr('points', calcPoints)
.attr('class', 'guide-line-inner')
.style('opacity', 0)
.transition().duration(300)
.style('opacity', d => { return d.data.value <= 0 ? 0 : 1 })
lines.attr('points', calcPoints).attr('class', 'guide-line-inner')
// TEXT
text.enter()
.append('text')
.html(labelText)
.attr('class', 'inner-text label label-circle')
.attr('transform', labelTransform)
.attr('dy', '1.1em')
.attr('x', d => { return (midAngle(d) < Math.PI ? 15 : -15) })
.style('text-anchor', d => { return (midAngle(d)) < Math.PI ? 'start' : 'end' })
.style('opacity', 0)
.call(wrap, 300)
.on('click', d => { vm.$emit('details', d) })
.transition().duration(300)
.style('opacity', d => { return d.data.value <= 0 ? 0 : 1 })
} else {
lines.transition().duration(300)
.style('opacity', 0)
.remove()
text.transition().duration(300)
.style('opacity', 0)
.remove()
}
guideContainer.selectAll('polyline.guide-line-outer').transition().duration(300)
.style('opacity', 0)
.remove()
guideContainer.selectAll('.outer-text').transition().duration(300)
.style('opacity', 0)
.remove()
}
Как я уже сказал, я не знаю D3, поэтому я не уверен, какие у меня есть варианты, чтобы это исправить. Уменьшите диаграмму, исправьте проблему с ее контейнером div, отправьте ее на передний план или отредактируйте приведенный выше код. В идеале это было бы чистым исправлением, а не взломом, что я и пытался.
Какое самое простое и чистое решение этой проблемы?
Спасибо!