chart = {
const svg = html `<svg width="900" height="500" />`
const g = d3.select(svg)
.append('g')
.style('font-family', 'sans-serif')
.style('font-size', 10)
g
.selectAll('g')
.data( data )
.join('g')
.attr('class', 'scatter-point')
.attr('transform', d => `translate(${xScale(d.revenues_mm)},${yScale(d.profit_mm)})`)
.call(g => g
.append('circle')
.attr('r', 5)
.style('stroke', d => colors( d.category ))
.style('stroke-width', 2)
.style('fill', 'transparent')
)
.call(g => g
.append('text')
.attr('x', 8)
.attr('dy', '0.35em')
.text(d => d.revenues_mm < 10000 ? '' : d.company)
)
d3.select(svg)
.append('g')
.attr('class', 'y-axis')
.attr('transform', `translate(${ margin.left },0)`)
.call(yAxis)
.select('.domain').remove()
d3.select(svg)
.append('g')
.attr('class', 'x-axis')
.attr('transform', `translate(0,${ height - margin.bottom })`)
.call(xAxis)
.select('.domain').remove()
g.append('g')
.attr('transform', `translate(${margin.left + 6},${margin.top + 4})`)
.append('text')
.attr('transform', 'rotate(90)')
.text(data.y)
g.append('text')
.attr('x', width - margin.right - 6)
.attr('y', height - margin.bottom - 5)
.attr('text-anchor', 'end')
.text(data.x)
return svg
}