【发布时间】:2021-10-25 07:29:43
【问题描述】:
我正在尝试为这个多折线图表创建一个图例,这将是一条直线,那么如何根据之前分组的项目宽度计算分组项目的变换转换值。
<g class="legend">
<g class="legend-group" transform="translate(0, 0)">
<rect x="0" y="0" width="12" height="12" style="fill: red"/>
<text x="16.79999" y="6" text-anchor="left" style="alignment-baseline: middle">Text 1</text>
</g>
<g class="legend-group" transform="translate(120, 0)">
<rect x="0" y="0" width="12" height="12" style="fill: green"/>
<text x="16.79999" y="6" text-anchor="left" style="alignment-baseline: middle">Text 2</text>
</g>
<g class="legend-group" transform="translate(240, 0)">
<rect x="0" y="0" width="12" height="12" style="fill: red"/>
<text x="16.79999" y="6" text-anchor="left" style="alignment-baseline: middle">Text 3 - Long Texttttt</text>
</g>
</g>
所以在这里,就像这些文本的长度不同,因此为所有图例组提供固定宽度不起作用,最好的解决方案是什么,这是代码,有没有更好的方法来做到这一点?
let {data} = this.props,
size = 12,
width = 120;
let legendGroup = select(node)
.selectAll('.legend-group')
.data(data)
.enter()
.append('g')
.class('class', 'legend-group')
.attr('transform', function(d, i) {
return `translate(${width * i}, 0)`
});
legendGroup
.append('rect')
.attr('x', 0)
.attr('y', 0)
.attr('width', size)
.attr('height', size)
.style('fill', d => d.color);
legendGroup
.append('text')
.attr('x', size * 1.4)
.attr('y', size/2)
.text(d => d.name)
.attr('text-anchor', 'left')
.style('alignment-baseline', 'middle')
【问题讨论】: