{
let text = {label: '', value: ''}
const width = configWidth - margin.left - margin.right
const height = configHeight - margin.top - margin.bottom
const radius = Math.min(configWidth, configHeight) / 2
const thickness = 40
const svg = d3.select(DOM.svg(width + margin.left + margin.right, height + margin.top + margin.bottom));
const container = svg.append('g')
.attr('class', 'donut')
.attr('transform', 'translate(' + (width / 4 + margin.left / 2) + ',' + (height / 2 + margin.top) + ')')
const textGroup = container.append('g')
.attr('class', 'text-group')
textGroup
.append('text')
.attr('font-size', '30')
.attr('class', 'name-text')
.attr('text-anchor', 'middle')
.attr('dy', '-1.2em')
textGroup
.append('text')
.attr('font-size', '25')
.attr('class', 'value-text')
.attr('text-anchor', 'middle')
.attr('dy', '.6em');
const legendContainer = svg.append('g')
.attr('class', 'legendOrdinal')
.attr('transform', `translate( ${3.5 * radius}, ${2 * margin.top})`)
const themeColors = d3colors.schemeSet1
const color = d3.scaleOrdinal(themeColors)
.domain(data.map((d) => d.species))
const arc = d3.arc()
.innerRadius(radius - thickness)
.outerRadius(radius)
const pie = d3.pie()
.value((d) => d.species)
.sort(null)
container.append('g')
.attr('class', 'donut-arcs')
.selectAll('path')
.data(pie(data))
.enter()
.append('g')
.append('path')
.attr('d', arc)
.attr('fill', (d) => color(d.data.species))
return svg.node()
}