Skip to main content

Animating and labeling figures with ImageMagick

ImageMagick is an incredible command-line tool that lets you edit and convert images of all sorts. Suppose you wanted to compare some figures that you’ve generated, and label the figures with their respective filenames so that you know which is which. Here’s a quick worked example in R and Terminal that gets you going.

First, let’s generate some figures to compare. The latest version of ggplot2 (3.0) recently added the new viridis color palettes as an option, and by default, that are ordered factors use the viridis palettes when assigned to the color or fill aesthetic. Let’s plot the default diamonds dataset to compare the two:

library(ggplot2)
# Uses viridis by default
ggplot(diamonds, aes(carat, price, color = clarity)) + geom_point()
ggsave("diamonds_ordered.png")

# Unorder the factor to use the unordered palette
ggplot(diamonds, aes(carat, price, color = factor(clarity, ordered = FALSE))) + geom_point() + labs(color = "clarity")
ggsave("diamonds_unordered.png")

Next, let’s fire up ImageMagick to convert this to an animated GIF. Sadly we can’t use this in papers yet but it can easily be blogged or tweeted about. brew install imagemagick if you don’t have it already, then:

convert -resize 33% -gravity north -undercolor '#ffffff80' -pointsize 16 -annotate 0 "%f" diamonds_*.png -set delay 100 -loop 0 diamonds_flicker.gif

This does a few things:

Here’s the end result:

A comparison of the two figure drawing methods

There’s a lot of cool stuff that ImageMagick can do (basically every kind of image manipulation imaginable), so check out the manual and start hacking!

If you found this post useful, please consider supporting my work with a glass of wine 🍷.