[R] figure with inset

Pascal.Niklaus@unibas.ch Pascal.Niklaus at unibas.ch
Tue Dec 6 21:16:21 CET 2005


Thanks for all your help.

For documentation (I'm probably not the last one searching R-help for a solution
to this problem), here is what I believe works best for the intended purouse:

x<-0:10;
y<-x^4;

library(gridBase)
X11(width=8,height=8)

# produce outer ("main") plot
   plot(x,y,xaxs="i",yaxs="i")
   vp <- baseViewports()
   pushViewport(vp$inner,vp$figure,vp$plot)

# push viewport that will contain the inset
   pushViewport(viewport(x=0.1,y=0.9,width=.5,height=.5,just=c("left","top")))

# now either define viewport to contain the whole inset figure
   par(fig=gridFIG(),new=T)  # or gridPLT()
# ...or just the plotting are (coordinate system)
   par(plt=gridPLT(),new=T)

# draw frame around selected area (for illustration only)
   grid.rect(gp=gpar(lwd=3,col="red"))

# plot inset figure
   plot(x,y,xaxs="i",yaxs="i",xlab="",ylab="")

# pop all viewports from stack
popViewport(4)

Pascal Niklaus

> > -----Original Message-----
> > From: r-help-bounces at stat.math.ethz.ch
> > [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Uwe Ligges
> > Sent: Tuesday, December 06, 2005 1:54 AM
> > To: Pascal.Niklaus at unibas.ch
> > Cc: r-help at stat.math.ethz.ch
> > Subject: Re: [R] figure with inset
> >
> > Pascal.Niklaus at unibas.ch wrote:
> >
> > > I am trying to plot a figure within a figure (an inset that
> > shows a closeup of
> > > part of the data set). I have searched R-help and other
> > sources but not found a
> > > solution.
> >
> > See the examples on the grid package by Paul Murrel in R News.
> >
> > Uwe Ligges
> >
>
> 1. Nice posting -- Your little diagram makes your question crystal clear.
>
> 2. Murrell's new book, R GRAPHICS, is a comprehensive resource on grid, if
> you decide you want to do more with it.
>
> 3. See also ?par ... new=TRUE  for a (less flexible, but perhaps adequate
> for your needs) way to do this in R's traditional graphics system.
>
> Cheers,
> Bert
>
>
> >
> > > What I would like to do is
> > >
> > > (1) produce a plot
> > > (2) specify a window that will be used for the next plot
> > (in inches or using the
> > > coordinate system of the plot produced in (1)
> > > (3) overlay a new plot in the window specified under (2)
> > >
> > > The result would be:
> > >
> > > +----------------------+
> > > |                      |
> > > | first plot           |
> > > |       +--------+     |
> > > |       | inset  |     |
> > > |       +--------+     |
> > > |                      |
> > > +----------------------+
> > >
> > > Thank you for your help
> > >
> > > Pascal
> > >




More information about the R-help mailing list