Inspired by Päivi Julin.

Sample generated images:


library(grid) 

## Number of frames
N <- 500
## Number of colors
k <- 100
## N/k is number of times color palette will repeat

## Some sample colors
colors <- rep(rainbow(k, s=0.8), N/k)
#colors <- rep(colorRampPalette(c('orange','yellow', 'darkorange'))(k), N/k)
#colors <- rep(colorRampPalette(c('white', 'pink', 'white', 'lightblue', 'white'))(k), N/k)
#colors <- colorRampPalette(c('beige', 'forestgreen', 'darkgreen'))(N)

## Draw background
dev.new()
pushViewport(viewport(width=1, height=1, angle=0))
grid.rect(gp = gpar(col = NA, fill = colors[1]))

## Scale viewport and rotate
for(i in 2:N){
  ## Optionally try increasing the angle or increasing the scale rate
  pushViewport(viewport(width=0.99, height=0.99, angle=1))
  # Optionally try: grid.circle(), grid.roundedrect()
  grid.rect(
    # Optionally shift: x = 0, y = 1,
    gp = gpar(col = NA, fill = colors[i])
  )
}