[R] Trouble with gridBase and inset plots

Lorenzo Isella lorenzo.isella at gmail.com
Fri Dec 5 13:17:14 CET 2008


Dear All,
I ma having a trouble in generating a figure containing 3 insets with
the gridBase package.
I always get an error message of the kind:

Error in gridPLT() : Figure region too small and/or viewport too large

No matter which parameters I choose. The plots works nicely with two
insets only, but when I try adding the third one, my troubles begin.
I am probably doing something wrong in the generation of the 3rd inset
and I paste below everything I do in this (a bit complicated) figure.
Any suggestion is welcome.
Cheers

Lorenzo


pdf("./post-processing-plots/exploratory_research_figure_2.pdf")
par( mar = c(4.5,5, 2, 1) + 0.1)
plot(time[1:time_end],tot_num_150[1:time_end]/1e6,type="b",lwd=2,col="blue",lty=2,
     xlab=expression(paste(tau,"[s]")),
     ylab=expression(paste("N[",
cm^{-3},"]")),cex.lab=1.6,ylim=range(c(7.4e7,1.43e8)),yaxt="n",cex.axis=1.4)
#lines(time[1],ini_pop/1e6, "p",col="red",lwd=2,lty=1,pch=5 )
lines(time[time_end],8.25e7, "p",col="red",lwd=2,lty=1,pch=5)

axis(side=2, at=c( 7.4e7, 9.6e7, 1.18e8, 1.4e8),
labels=expression(7.4%*%10^7, 9.6%*%10^7,
1.18%*%10^8,1.4%*%10^8),cex.lab=1.6,cex.axis=1.4)
#axis(side=1,cex.axis=1.4)
## lines(time[1:time_end],
N_approx[1:time_end],col="red",type="b",lwd=2,lty=1,pch=4)
## lines(time[1:time_end],
N_approx2[1:time_end],col="black",type="b",lwd=2,lty=1,pch=2)
## lines(time[1:time_end],
N_approx_beta1[1:time_end,2],col="brown",type="b",lwd=2,lty=1,pch=5)
legend("topright",cex=1.2, c(expression("Simulation"),
expression("Outlet measurement")),
lwd=c(2,2),lty=c(2,0),pch = c(1,5),col=c("blue", "red"),box.lwd=0,box.lty=0,
,xjust = 1, yjust = 1)
# abline(v=time[12],lwd=2,pch=2,lty=2)
lines(c(time[14],time[14]), c(0,1.2e8),lwd=2,lty=2,pch=2)
# legend(-0.2,9.2e7,cex=1.2,c(expression("numerical result for a
5m-long pipe")),bty="n")
 arrows(0.8, 9e7, time[14], tot_num_150[14]/1e6, length = 0.15,lwd=2)
text(0.8,8.8e7,cex=1.2,"Final concentration for a")
text(0.8,8.5e7,cex=1.2,"6.5m long transfer tube (LAT)")

text(0.8,8e7,cex=1.2,"Final concentration for a")
text(0.68,7.7e7,cex=1.2,"9m long transfer tube")
text(0.8,7.4e7,cex=1.2,"(VELA)")

text(1.3,1.24e8,cex=1.2,"Residence time for")
text(1.3,1.21e8,cex=1.2,"a 6.5m long transfer tube")


arrows(1.1, 7.7e7, time[21], 7.7e7, length = 0.,lwd=2)
arrows( time[21], 7.7e7, time[21], tot_num_150[21]/1e6, length = 0.15,lwd=2)



par( mar = c(0.,0., 0., 0.) )


#1st inset

vp <- baseViewports()
   pushViewport(vp$inner,vp$figure,vp$plot)
   pushViewport(viewport(x=-0.0,y=1.04,width=.4,height=.4,just=c(0,1)))

   par(fig=gridPLT(),new=F)

#grid.rect(gp=gpar(lwd=0,col="red"))

   plot(D_mean,data_150[1, ]/log_factor*log(10)/1e6,"l",
        pch=1,col="black", lwd=2,xlab="",ylab=""
        ,cex.axis=1.,cex.lab=1.,log="x",xaxt="n",yaxt="n",
ylim=range(c(0, 2.4e8)))

## axis(side=2, at=c( 0, 0.6e8, 1.2e8, 1.8e8, 2.4e8),
## labels=expression(0, 6%*%10^7, 1.2%*%10^8,
1.8%*%10^8,2.4%*%10^8),cex.lab=1.4,cex.axis=1.2)


#2nd inset

#vp <- baseViewports()
   pushViewport(vp$inner,vp$figure,vp$plot)
   pushViewport(viewport(x=0.5,y=0.65,width=.4,height=.4,just=c(0,1)))

   par(fig=gridPLT(),new=F)

#grid.rect(gp=gpar(lwd=0,col="red"))

   plot(D_mean,data_150[21, ]/log_factor*log(10)/1e6,"l",lwd=2,
        pch=1,col="black",xlab="",ylab="", log="x"
        ,cex.axis=1.4,cex.lab=1.6,xaxt="n",yaxt="n",ylim=range(c(0, 2.4e8)))



#3rd inset

#vp <- baseViewports()
   pushViewport(vp$inner,vp$figure,vp$plot)
   pushViewport(viewport(x=0.25,y=0.7,width=.4,height=.4,just=c(0,1)))

   par(fig=gridPLT(),new=T)

#grid.rect(gp=gpar(lwd=0,col="red"))

   plot(D_mean,data_150[14, ]/log_factor*log(10)/1e6,"l",lwd=2,
        pch=1,col="black",xlab="",ylab="", log="x"
        ,cex.axis=1.4,cex.lab=1.6,xaxt="n",yaxt="n",ylim=range(c(0, 2.4e8)))


popViewport(3)


dev.off()



More information about the R-help mailing list