[R] Odp: Multifactor boxplots

David Winsemius dwinsemius at comcast.net
Fri Jul 29 15:41:46 CEST 2011

On Jul 29, 2011, at 8:05 AM, Petr PIKAL wrote:

> Hi
>> 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.
> Combination of axes=FALSE
> boxplot(x~TreatA:TreatB,data=Newdata, axes=F)
> and following axis and mtext commands seems to do what you want
> axis(2)
> axis(1, at= 1:4,labels=c("H", "H", "L", "L"))

I didn't seem to get axes=FALSE to work the way I expected (or even  
find it in boxplot or par documentation... oh, there it is in  
plot.default)  so also tried xaxt="n" and also tried to get the "over/ 
under" arrangement of the labels and "Treat"'s  as specified:

boxplot(x~TreatA:TreatB,data=Newdata, xaxt="n")
axis(1, at= 1:4,labels=c("Treat A:High\nTreat B:High", "High\nLow",  
"Low\nHigh", "Low\nLow"), padj=1 )

---End of answer---

<whine-mode on>
Now I have a question: If axes=FALSE is going to also suppress the  
drawing of the box, shouldn't that be documented in the help page of  
plot.default so that if someone (eventually) finds the right help page  
they can develop the correct expectation? Yes, I can see that  
frame.plot=axes is the default argument, but should we give the useR a  
break and mention that in the Details?

And shouldn't the boxplot help page say that plot.default is  
eventually called and give a link to it so that the available  
graphical parameters are made known to the useR? Well, now that I  
follow the ?bxp link I see that 'axes' is mentioned, but one is  
further referred to ?plot.window which says _nothing_ about 'axes'.  
But then in the code for bxp() I see that plot.default is not called  
and that 'axes' are handled inside that function and nothing is passed  
off to either plot.window or plot.default. <whine-mode off>


David Winsemius, MD
West Hartford, CT

More information about the R-help mailing list