Skip to Content

Rosling.bubbles {animation}

The bubbles animation in Hans Rosling's Talk


In Hans Rosling's attractive talk “Debunking third-world myths with the best stats you've ever seen”, he used a lot of bubble plots to illustrate trends behind the data over time. This function gives an imitation of those moving bubbles, besides, as this function is based on symbols, we can also make use of other symbols such as squares, rectangles, thermometers, etc.


Rosling.bubbles(x, y, data, type = c("circles", "squares", "rectangles", "stars", 
    "thermometers", "boxplots"), bg, xlim = range(x), ylim = range(y), main = NULL, 
    xlab = "x", ylab = "y", ..., grid = TRUE, text = 1:ani.options("nmax"), 
    text.col = rgb(0, 0, 0, 0.5), text.cex = 5)


x, y
the x and y co-ordinates for the centres of the bubbles (symbols). Default to be 10 uniform random numbers in [0, 1] for each single image frame (so the length should be 10 * ani.options('nmax'))
type, data
the type and data for symbols; see symbols. The default type is circles.
bg, main, xlim, ylim, xlab, ylab, ...
see symbols. Note that bg has default values taking semi-transparent colors.
logical; add a grid to the plot?
a character vector to be added to the plot one by one (e.g. the year in Rosling's talk)
text.col, text.cex
color and magnification of the background text


Suppose we have observations of n individuals over ani.options('nmax') years. In this animation, the data of each year will be shown in the bubbles (symbols) plot; as time goes on, certain trends will be revealed (like those in Rosling's talk). Please note that the arrangement of the data for bubbles (symbols) should be a matrix like A_{ijk} in which i is the individual id (from 1 to n), j denotes the j-th variable (from 1 to p) and k indicates the time from 1 to ani.options('nmax').

And the length of x and y should be equal to the number of rows of this matrix.



See Also



oopt = ani.options(interval = 0.1, nmax = ifelse(interactive(), 50, 2))
## use default arguments (random numbers); you may try to find the real
## data
par(mar = c(4, 4, 0.2, 0.2))
## rectangles
Rosling.bubbles(type = "rectangles", data = matrix(abs(rnorm(50 * 10 * 
    2)), ncol = 2))
## save the animation in HTML pages
    par(mar = c(4, 4, 0.2, 0.2))
    ani.options(interval = 0.1, nmax = ifelse(interactive(), 50, 2))
    Rosling.bubbles(text = 1951:2000)
}, = "Rosling.bubbles", htmlfile = "Rosling.bubbles.html", ani.height = 450, 
    ani.width = 600, title = "The Bubbles Animation in Hans Rosling's Talk", 
    description = c("An imitation of Hans Rosling's moving bubbles.", 
        "(with 'years' as the background)"))


Yihui Xie

Documentation reproduced from package animation, version 2.4. License: GPL