# [R] Multifactor boxplots

Dennis Murphy djmuser at gmail.com
Fri Jul 29 15:23:51 CEST 2011

```Hi:

Here are a couple of attempts, one with base graphics and one with lattice.

d <- data.frame(TreatA = gl(2, 50, 100, labels = c('High', 'Low')),
TreatB = rep(gl(2, 25, 50, labels = c('High', 'Low')), 2),
Test = c(rnorm(50, 50, 10), rnorm(50, 100, 10)))
lbl <- c('High\nHigh', 'High\nLow', 'Low\nHigh', 'Low\nLow')

# Lattice version:
library('lattice')
bwplot(Test ~ interaction(TreatA, TreatB), data = d,
scales = list(x = list(at = 1:4, label = lbl)))
trellis.focus('toplevel')
panel.text(0.08, 0.065, 'Treat A:\nTreat B:', cex = 0.75)
trellis.unfocus()

boxplot(Test ~ interaction(TreatA, TreatB), data = d, xaxt = 'n')
axis(1, at = 1:4, lab = lbl)
mtext('Treat A:\nTreat B:', side = 1, line = 1, at = 0)

You can adjust the position and size of the text to your taste. The
idea for the lattice plot comes from the following post in the list
archives:
http://r-project.markmail.org/search/?q=panel.text#query:panel.text+page:4+mid:2e3xpb2tsufntwya+state:results

HTH,
Dennis

On Fri, Jul 29, 2011 at 4:53 AM, Tom Wilding <Tom.Wilding at sams.ac.uk> wrote:
> Dear All
>
> I would like to produce interaction boxplots and this seems to work:
>
> par(mfrow=c(2,2))
> A=sample(rnorm(50,50,10))
> B=sample(rnorm(50,100,10))
> Test=merge(A,B,by=0)#by=0 where 0 is the row.names
> TreatA=(gl(2,50,100,labels=c("High","Low")))
> TreatB=rep(gl(2,25,50,labels=c("High","Low")),2)
> Newdata=data.frame(TreatA,TreatB,Test)
>
> bwplot(x~TreatA:TreatB,data=Newdata)
>
> However, I would prefer the X axis labels to be different, such that there are two label rows (TreatA and TreatB) something like this:
>
> TreatA    High     High    Low       Low
> TreatB    High     Low     High      Low
>
> any guidance on achieving this much appreciated.
>
> Regards
>
> Tom
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help