A violin is an estimate

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.

Free is capped at 30 minutes a day, and the wall of readings pinned at exactly 30 comes out of the estimate as a gentle bulge that even glides a little past the cap, where no reading exists at all. Trial's curve looks as confident as the others; it stands on 14 readings. The violins are derived, not supplied: each datum carries raw 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.