This post describes how to build a violin plot with individual observation represented. Overlapping is avoided thanks to jittering. It allows to see every single data points and thus to potentially add a tooltip for each of them.
d3.histogram()
function for binning. Smoothing is made thanks to the curve
function.