Animated Plots with R

June 12, 2011
By

(This article was first published on Playing with R, and kindly contributed to R-bloggers)



Using ImageMagick it's pretty easy to make an animated gif from a set of plots. Essentially the way to do it is to save a plot for each frame of the animation and then convert them into a .gif. Here's a simple example that plots binomial density's for two different success rates and n between 1 and 50.


#set working directory
setwd('~/Documents/R/images/')

frames = 50

for(i in 1:frames){
# creating a name for each plot file with leading zeros
if (i < 10) {name = paste('000',i,'plot.png',sep='')}
if (i < 100 && i >= 10) {name = paste('00',i,'plot.png', sep='')}
if (i >= 100) {name = paste('0', i,'plot.png', sep='')}

x = seq(0, i, 1)
f.3 = dbinom(x, size = i, prob=.3)
f.7 = dbinom(x, size = i, prob=.7)

#saves the plot as a .png file in the working directory
png(name)
plot(x, f.3, type='h', xlim = c(0,frames), ylim = c(0,.7), ylab ='probability',
main = paste('Binomial density with n = ', i), col = 'red')
lines(x,f.7,type='h',col='blue')
text(45, .6, 'p = .3', col='red')
text(45, .6, 'p = .7', col='blue', pos=1)
dev.off()
}


The important part of the code is the png function. This function saves the plot as a .png file in the working directory (there are aslo jpeg, bmp, and tiff functions that work the same way). Anything between the png and dev.off() will be saved in the plot.

After running this code there will be 50 .png files in your working directory. Now it's time to use ImageMagick. From a command line navigate to the directory where the .png files are saved and enter the following command.


$ convert *.png -delay 3 -loop 0 binom.gif


This will convert all the .png files into a animated .gif file. The -delay 3 option sets the delay between frames. The -loop 0 option makes it so the .gif repeats forever, -loop 5 would repeat the animation 5 times.


An After Thought: I made this plot just as a simple example but I think it's also a nice visualization of hypothesis testing. In the animation we can see the power of the corresponding simple versus simple hypothesis test goes to 1 as n increases. Also, I haven't tried it, but it might be neat to look at the animation with 3D glasses.

To leave a comment for the author, please follow the link and comment on his blog: Playing with R.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.