[R] multiple boxplots

Marc Schwartz (via MN) mschwartz at mn.rr.com
Fri Oct 28 20:12:07 CEST 2005


On Fri, 2005-10-28 at 10:26 -0700, J.M. Breiwick wrote:
> Hello,
> 
> I want to plot 3 boxplots [ par(mfrow=c(3,1)) ] but the first one has 8 
> groups, the 2nd has 7 and the third has 6. But I the groups to line up:
> 
>  1 2 3 4 5 6 7 8
>    2 3 4 5 6 7 8
>       3 4 5 6 7 8
> 
> where the numbers actually refer to years. I suspect I have to manipulate 
> the function bxp(). Is there a relatively simple way to do this? Thanks for 
> any help.
> 
> Jeff Breiwick
> NMFS, Seattle


Here is one approach. It is based upon using 2 principal concepts:

1. Create the first plot, save the plot region ranges from par("usr")
and then use this information for the two subsequent plots, where we use
the 'add = TRUE' argument.

2. Use the 'at' argument to specify the placement of the boxes in the
second and third plots to line up with the first.


So:

# Create our data.
dat <- rnorm(80)
years <- rep(1991:1998, each = 10)

# MyDF will be a data frame with two columns and we will use 
# this in the formula method for boxplot.
# The second and third plots will use subset()s of MyDF
MyDF <- cbind(dat, years)

# Set the plot matrix
par(mfrow = c(3, 1))

# Create the first boxplot and save par("usr")
boxplot(dat ~ years, MyDF)
usr <- par("usr")

# Now open a new plot, setting it's par("usr") to 
# match the first plot.
# Then use boxplot and set the boxes 'at' x pos 2:8
# and add it to the open plot
plot.new()
par(usr = usr)
boxplot(dat ~ years, subset(MyDF, years %in% 1992:1998),
        at = 2:8, add = TRUE)


# Rinse and repeat  ;-)
# Different subset and use 3:8 for 'at'
plot.new()
par(usr = usr)
boxplot(dat ~ years, subset(MyDF, years %in% 1993:1998),
        at = 3:8, add = TRUE)



Replace MyDF in the above with your actual datasets of course.

This would of course be a bit easier if one could set an 'xlim' argument
in boxplot(), but this is ignored by bxp().

HTH,

Marc Schwartz




More information about the R-help mailing list