[R] Problem in overlying two figures in ggplot2

Jim Lemon jim at bitwrit.com.au
Mon Jan 27 23:25:31 CET 2014


On 01/28/2014 03:52 AM, Kristi Glover wrote:
> Hi R Users,
> I was struggling to overlay two graphs created from the two different datasets using ggplot2.I could not overlay two figures. I wanted to plot second graph using second Y axis. but there was no provision.
> Furthermore, I could not join means of the box plots.
>
> I tried this way but did not work. Any suggestions?
> dat1<-structure(list(site = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
> 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), layer = structure(c(2L,
> 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L,
> 1L, 1L), .Label = c("bottom", "top"), class = "factor"), Present = c(120L,
> 125L, 123L, 23L, 21L, 19L, 131L, 124L, 127L, 24L, 27L, 25L, 145L,
> 143L, 184L, 29L, 14L, 17L, 38L)), .Names = c("site", "layer",
> "Present"), row.names = c(NA, 19L), class = "data.frame")
> dat1
> dat2<-structure(list(site = 1:3, present = c(-3L, 2L, 5L)), .Names = c("site",
> "present"), row.names = c(NA, 3L), class = "data.frame")
> dat2
> library("plyr")
> library(ggplot2)
> A<-ggplot(dat1, aes(x = factor(site), y = Present, colour = layer, fill=layer)) +
>      geom_boxplot(outlier.shape = 16, outlier.size = 1)  + theme_bw()+ ylim(0,185)
> # Here I wanted to join the means of the boxplots among the sites, but I could not join it.
> B<-ggplot(dat2, aes(x=factor(site),y= present, colour="blue") +
>       geom_line() + geom_point()) # wanted to plot it using second y axis.
> A+B

Hi Kristi,
It's not ggplot, but this might help.

par(mar=c(5,4,4,4))
boxplot(Present~layer+site,data=dat1,staplewex=0,
  col=c(2,3,2,3,2,3),border=c(2,3,2,3,2,3),
  ylab="Present",xlab="factor(site)",xaxt="n")
boxat<-c(1.5,3.3,5.5)
axis(1,at=boxat,labels=1:3)
library(plotrix)
# or library(prettyR)
newpresent<-rescale(c(-5,dat2$present),c(50,100))[-1]
points(boxat,newpresent,type="b",col="blue")
axis(4,at=c(50,75,100),labels=c(-5,0,5),col="blue")
mtext("Means of sites",side=4,at=150,line=0.5,col="blue")
legend(1,170,c("Top","Bottom"),fill=c("green","red"))
par(mar=c(5,4,4,2))

Jim




More information about the R-help mailing list