Bowl of Fruits - General Update Pattern
This example demonstrates the general update pattern in D3, showing how data joins manage enter, update, and exit states for SVG circles. A bowl of apples transitions over time as fruits are removed, replaced with lemons, and filtered out, with each change animating via `transition().duration(1000)`. The code uses `scaleOrdinal` for color and radius scales, `selectAll('circle').data(fruits, d => d.id)` for keyed data binding, and `.enter()`, `.merge()`, and `.exit()` to coordinate lifecycle updates.