RStudio IDE

Interactive Plotting with Manipulate

RStudio includes a manipulate package that enables the addition of interactive capabilities to standard R plots. This is accomplished by binding plot inputs to custom controls rather than static hard-coded values.

Basic Usage

The manipulate function accepts a plotting expression and a set of controls (e.g. slider, picker, or checkbox) which are used to dynamically change values within the expression. When a value is changed using its corresponding control the expression is automatically re-executed and the plot is redrawn.

For example, to create a plot that enables manipulation of a parameter using a slider control you could use syntax like this:

library(manipulate)
manipulate(plot(1:x), x = slider(1, 100))

After this code is executed the plot is drawn using an initial value of 1 for x. A manipulator panel is also opened adjacent to the plot which contains a slider control used to change the value of x from 1 to 100.

Slider Control

The slider control enables manipulation of plot variables along a numeric range. For example:

manipulate(
  plot(cars, xlim=c(0,x.max)),  
  x.max=slider(15,25))

Results in this plot and manipulator:

Slider controls also support custom labels and step increments.

Picker Control

The picker control enables manipulation of plot variables based on a set of fixed choices. For example:

manipulate(
  barplot(as.matrix(longley[,factor]), 
          beside = TRUE, main = factor),
  factor = picker("GNP", "Unemployed", "Employed"))

Results in this plot and manipulator:

Picker controls support arbitrary value types, and can also include custom user-readable labels for each choice.

Checkbox Control

The checkbox control enables manipulation of logical plot variables. For example:

manipulate(
  boxplot(Freq ~ Class, data = Titanic, outline = outline),
  outline = checkbox(FALSE, "Show outliers"))

Results in this plot and manipulator:

The manipulate package documentation contains additional details on all of the options available for the various control types.

Combining Controls

Multiple controls can be combined within a single manipulator. For example:

manipulate(
  plot(cars, xlim = c(0, x.max), type = type, ann = label),
  x.max = slider(10, 25, step=5, initial = 25),
  type = picker("Points" = "p", "Line" = "l", "Step" = "s"),
  label = checkbox(TRUE, "Draw Labels"))

Results in this plot and manipulator: