in src/TornadoChart.ts [1001:1055]
private renderLabels(dataPoints: TornadoChartPoint[], labelsSettings: VisualDataLabelsSettings): void {
let labelSelectionMerged: Selection<TornadoChartPoint>,
labelSelection: Selection<TornadoChartPoint> = this.main
.select(TornadoChart.Labels.selectorName)
.selectAll(TornadoChart.Label.selectorName)
.data(dataPoints.filter((p: TornadoChartPoint) => p.label.dx >= 0));
// Check if labels can be displayed
if (!labelsSettings.show || this.dataView.labelHeight >= this.heightColumn) {
this.labels.selectAll("*").remove();
return;
}
let fontSizeInPx: string = PixelConverter.fromPoint(labelsSettings.fontSize);
let labelYOffset: number = this.heightColumn / 2 + this.dataView.labelHeight / 2 - this.InnerTextHeightDelta;
let categoriesLength: number = this.dataView.categories.length;
labelSelectionMerged = labelSelection
.enter()
.append("g")
.merge(labelSelection);
labelSelectionMerged
.append("svg:title")
.classed(TornadoChart.LabelTitle.className, true);
labelSelectionMerged
.append("svg:text")
.attr("dy", dataLabelUtils.DefaultDy)
.classed(TornadoChart.LabelText.className, true);
labelSelectionMerged
.attr("pointer-events", "none")
.classed(TornadoChart.Label.className, true);
labelSelectionMerged
.select(TornadoChart.LabelTitle.selectorName)
.text((p: TornadoChartPoint) => p.label.source);
labelSelectionMerged
.attr("transform", (p: TornadoChartPoint, index: number) => {
let dy: number = (this.heightColumn + this.columnPadding) * (index % categoriesLength);
return translate(p.label.dx, dy + labelYOffset);
});
labelSelectionMerged
.select(TornadoChart.LabelText.selectorName)
.attr("fill", (p: TornadoChartPoint) => p.label.color)
.attr("font-size", fontSizeInPx)
.text((p: TornadoChartPoint) => p.label.value);
labelSelection
.exit()
.remove();
}