{
const svg = d3.create('svg')
.attr('width', widthDiamond)
.attr('height', heightDiamond);
const chart = svg.append('g')
.attr('transform', `translate(${marginDiamond.left},${marginDiamond.top})`);
const innerWidth = widthDiamond - marginDiamond.left - marginDiamond.right;
const innerHeight = heightDiamond - marginDiamond.top - marginDiamond.bottom;
const group = chart.append('g')
.selectAll('g')
.data(Array.from(colorToCutToCount))
.join('g')
.attr('transform', ([color]) => `translate(${groupX(color)},0)`);
const localBarX = d3.scaleBand()
.domain(diamondCuts)
.range([0, groupX.bandwidth()])
.padding(0.1);
group.selectAll('rect')
.data(([color, cutMap]) =>
Array.from(cutMap, ([cut, count]) => ({ color, cut, count }))
)
.join('rect')
.attr('x', d => {
return localBarX(d.cut);
})
.attr('width', d => {
return localBarX.bandwidth();
})
.attr('y', d => y(d.count) - marginDiamond.top - marginDiamond.bottom)
.attr('height', d => y(0) - y(d.count))
.attr('fill', d => color(d.cut));
chart.append('g')
.attr('transform', `translate(0, ${innerHeight})`)
.call(xAxisDiamond)
.call(g => g.select('.domain').remove())
.append('text')
.attr('x', innerWidth / 2)
.attr('y', 40)
.attr('text-anchor', 'middle')
.attr('fill', 'black')
.text('Diamond Color');
chart.append('g')
.call(yAxisDiamond)
.call(g => g.select('.domain').remove())
.append('text')
.attr('x', -marginDiamond.left)
.attr('y', -10)
.attr('text-anchor', 'start')
.attr('fill', 'black')
.text('Count');
return svg.node();
}