Я подозреваю, что происходит, когда диаграмма устанавливает метку на пустую строку, когда нет данных, а затем вы устанавливаете ее обратно в свой обработчик pretransition
.
Диаграмма имеет
function sliceTooSmall (d) {
var angle = (d.endAngle - d.startAngle);
return isNaN(angle) || angle < _minAngleForLabel;
}
источник
labels
.text(function (d) {
var data = d.data;
if ((sliceHasNoData(data) || sliceTooSmall(d)) && !isSelectedSlice(d)) {
return '';
}
return _chart.label()(d.data);
});
источник
В обработчике pretransition
вы можете определить, решил ли диаграмма не отображать текст, с помощью d3.select(this).text()
:
.on('pretransition', function(pieChart) {
pieChart.selectAll('text.pie-slice').text(function(d) {
return d3.select(this).text() && (d.data.key + ' ' +
dc.utils.printSingleValue((d.endAngle - d.startAngle) /
(2*Math.PI) * 100) + '%');
})
});
Как только вы это сделаете, вы, вероятно, захотите установить minAngleForLabel
немного ниже, так как он указан в радианах.