D3 Selection Exploration
This example demonstrates how D3’s data join pattern animates a dynamic set of circles, whose count and vertical positions oscillate sinusoidally over time. Using `d3.select` and `d3.range`, it generates an array of points and binds them to SVG circle elements via `selection.data()` and `selection.join()`, updating `cx` and `cy` attributes each frame. The code runs a `setInterval` at 60fps, recalculating data with a time-based sine wave, while `d3` version 7.6.1 manages enter, update, and exit states automatically.