Each curve below is a density estimate: a smoothed guess at where the readings sit, computed from the readings themselves. Smoothing is the point, and also the catch. A curve cannot show how many readings it stands on, and it rounds hard edges off. Press the button and each violin dissolves into its actual readings, jittered across the lane, then gathers back into the curve.
points and the library
runs the density estimate. That is also what makes the dissolve possible,
because chart.rowSeries() hands back the observations behind
every mark; the jitter view is the unit type's scatter layout with
spread: 'jitter'. To see dots and curve at once without
morphing, a violin can overlay its own via
plotOptions.violin.points.