[R] How to get two y-axises in a bar plot?

Gustaf Granath Gustaf.Granath at ebc.uu.se
Tue Jan 29 17:15:03 CET 2008


Hi,
I have measured two response variables (y1, y2) at each treatment level 
(x = 0, 1.5 or 3). Now I would like to show the y1 and y2 against x in a 
bar plot. However, y1 and y2 differ in scale so I need two y-axises, one 
on the left side and one on the right side (and I dont want to 
standardize my responses). This is fairly easy if you want to show 
points,lines etc, but gets more complicated with bars.Although these 
kind of bar graphs are quite common, I have found very limited 
information about how to do them in R. I have been struggling with the 
barplot() command. My problem is that the bars for y1 and y2 end up at 
the same place (blocking each other) and not beside each other when I 
use par(new=TRUE). Is there a way to separate them so y1 and y2 are 
placed beside each other at each x level, or is this easier to do this 
with lattice?? I would also like to add error bars but I guess that 
should not be a problem.

For code and data, see below.

Cheers,

Gustaf Granath, phd student

My code so far:
#Creating data
c(6.34,13.38,17.87)->y1
c(0.85,1.88,2.33)->y2
c(0,1.5,3)->x
cbind(y1,y2,x)->mydata
data.frame(mydata)->mydata
with(mydata, tapply(y1,x,mean))->mean.y1
with(mydata, tapply(y2,x,mean))->mean.y2
#Barplot
par(mar=c(5,4,4,4)+0,1)
barplot(mean.y1,density=1,las=1)
par(new=T)
barplot(mean.y2,density=3,angle=3,axes=F)
axis(4,las=1)



More information about the R-help mailing list