我用javascript做了一个piechart,现在我想把它放到一个react组件中。但是,它只画了一个切片,而且那个切片甚至还没有完成,它被切断了。下面是从react组件中切下的切片的图片,以及它在html中的渲染效果。
我不知道为什么。
这是我的函数绘制它:
function drawDonut(inputData: DealNumbers[]) {
const radius = Math.min(width, height) / 2;
const color = d3.scaleOrdinal(d3.schemeCategory10);
const arc = d3.arc()
.outerRadius(radius - margin.top)
.innerRadius(radius - radius * 0.5);
const pie = d3
.pie()
.padAngle(0)
.value((d) => d.deals);
svg
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom)
.append('g')
.attr('transform', `translate(${(width / 2) + margin.left}, ${(height / 2) + margin.top})`);
svg
.selectAll('.arc')
.data(pie(inputData))
.enter()
.append('g')
.attr('class', 'arc')
.append('path')
.attr('d', arc)
.style('fill', (d) => color(d.data.name));
除了我使用了svg view box
,并将width
和height
作为道具传递而不是硬编码之外,它几乎是相同的。它从javascript中提取得很好。
感谢任何提示和技巧,你是能够和花时间给予!
顺祝商祺!
奥利弗
1条答案
按热度按时间bkhjykvo1#
问题出在视图框上(将原点从0,0移动到-width,-height),出于某种原因,我不得不复制中间变量
然后用这些来代替
width
。这样我就不需要调整视图框的原点了。这至少可以说有点奇怪。我不会接受这个答案,因为我不知道为什么。但是添加它是为了让其他人在寻找答案的时候也能找到答案。