hoverChart = {
const svg = d3.create('svg')
.attr('width', width)
.attr('height', height)
.style('background-color', '#1a1a1a')
const delaunay = d3.Delaunay.from( data, d => d.x, d => d.y )
const points = svg.selectAll('circle')
.data( data )
.join('circle')
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', d => Math.max(Math.abs(20 * d.value), 3))
.style('stroke-width', 0)
.style('stroke-opacity', 0.7)
.style('stroke', (d,i) => color(d.value))
.style('fill', d => color(d.value))
.style('fill-opacity', 0.85)
svg.on('mousemove', function(e) {
const { layerX, layerY } = e
const pointIndex = delaunay.find( layerX, layerY )
points
.transition()
.style('stroke-width', (d,i) => i == pointIndex ? 20 : 0 )
})
.on('mouseleave', function() {
points
.transition()
.style('stroke-width', 0 )
})
return svg.node()
}