Clover Rainbow
A clover curve drawn with 120 circles, whose radii and colors come from the same parameter. cm.mapAttrs maps it to sizes and to a rainbow.
js
const renderer = cm.canvas({width: 640, height: 640});
const root = cm.flow().renderer(renderer);
root
.data(Array.from({length: 120}, (_, i) => (i * Math.PI) / 120))
.append(cm.circle, {
x: (t) => Math.cos(t) * Math.cos(t * 3),
y: (t) => Math.sin(t) * Math.cos(t * 3),
r: (t) => t,
fill: (t) => t,
})
.transform(cm.mapPosition, {padding: 30})
.transform(cm.mapAttrs, {
r: {range: [8, 15]},
fill: {interpolate: d3.interpolateRainbow},
});
root.render();
document.body.append(renderer.node());