Skip to content

Defining a viewport scale in {Grid}

3 messages · geotheory, ilai, Baptiste Auguie

#
Am just feeling my way into the grid library, and cannot figure out how to
define the plot limits.  3/5 of the example polygons below plot in the
default 0-1 range viewport.  But when I try to redefine the viewport the
polygons plot in the same places.  I also get the same result without
employing push/pop.  (As you can see from the scale I'm trying to introduce,
I want to plot map polygons.)  Grateful for an idea where I'm going wrong.

pushViewport(viewport(xscale=c(-180,180),yscale=c(-90,90)))

grid.polygon(x=c(0,5,5,0)/100, y=c(0,0,5,5)/100, draw = T)
grid.polygon(x=c(100,95,95,100)/100, y=c(100,100,95,95)/100, draw = T)
grid.polygon(x=c(50,70,70,50)/100, y=c(50,50,70,70)/100, draw = T) 
grid.polygon(x=-c(10,10,40,40)/100, y=c(10,40,40,10)/100, draw = T)
#NEGATIVE X
grid.polygon(x=c(50,52,52,50)/100, y=-c(50,50,52,52)/100, draw = T)
#NEGATIVE Y

popViewport()

Thanks in advance.

--
View this message in context: http://r.789695.n4.nabble.com/Defining-a-viewport-scale-in-Grid-tp4393974p4393974.html
Sent from the R help mailing list archive at Nabble.com.
#
Read the Details section in ?viewport carefully. You are treating
xscale/yscale as if they are xlim/ylim in base graphics. They are not.
It may take some trial and error on your part to figure out how
exactly this works, in general you are setting the size and location
of each polygon relative to the parent viewport (in this case the
plotting region), so you need to make the sizes smaller. Here are a
couple of examples:

pushViewport(viewport(width=unit(.5,'npc'),height=unit(.5,'npc'),just=c('left','bottom')))
# ... draw your 5 polygons

dev.off()
pushViewport(viewport(width=unit(.5,'npc'),height=unit(.5,'npc'),just='bottom',yscale=c(-1,1)))
# ... draw your 5 polygons

Hope this helps
On Thu, Feb 16, 2012 at 6:47 AM, geotheory <geotheory1 at gmail.com> wrote:
#
The default units of polygonGrob are "npc", I think you want "native" instead.

Try the following,

 library(grid)
 d = data.frame(x=rnorm(100, 10), y=rnorm(100, -100))
 v = dataViewport(xData=d$x, yData=d$y)
 grid.points(d$x,d$y, default.units="native", vp=v)

HTH,

b.
On 17 February 2012 02:47, geotheory <geotheory1 at gmail.com> wrote: