[R-sig-Geo] Several gstat variograms on a single page
Edzer J. Pebesma
e.pebesma at geo.uu.nl
Thu May 3 10:58:09 CEST 2007
Michal,
I think (and hope for you) it is not necessary to search the solution at
the level of grid. The plot function for variograms in package gstat is
a rather (?) thin wrapper around xyplot, so if you carefully read how to
control the main and sub arguments of ?xyplot, then you're done:
library(gstat)
data(meuse)
coordinates(meuse)=~x+y
v = variogram(log(zinc)~1,meuse)
v.pl = plot(v, main="log-zinc",sub=list(label = "xx", cex=.5))
Next you can print the v.pl etc. objects side by side using print(v.pl,
more = TRUE) etc.
--
Edzer
Michal Gallay wrote:
> Dear R Users,
>
> I'd like to ask you for help. I am R beginner, tackling R for about three
> months. I'd like to produce variograms with 0, 1st, 2nd order detrending
> for 30 ascii grid files containing elevation data.
>
> I've got problem with a simple thing but as it seems to me not as easy one
> as I thought. I hope I just can't see because of my eyes.
>
> I'd like to plot three gstat variograms in one row on one page, to give
> them a main title (just single one for all three of the plots), and for
> each of the plots a subtitle, controlling the fontsize.
>
> At first I used following approach:
>
> #Calculation of the variogram and store it in a variable var...
> g <- gstat(id = "xyz.values",
> formula=z~1,
> locations = ~x+y,
> data = xyz.values,
> set = list(fraction = 0.33, width = 2))
> var.0ot <- variogram(g)
>
> g <- gstat(id = "xyz.values",
> formula=z~x+y,
> locations = ~x+y,
> data = xyz.values,
> set = list(fraction = 0.33, width = 2))
> var.1ot <- variogram(g)
>
> g <- gstat(id = "xyz.values",
> formula= z~x + y + I(x*y) + I(x^2) + I(y^2),
> locations = ~x+y,
> data = xyz.values,
> set = list(fraction = 0.33, width = 2))
> var.2ot <- variogram(g)
>
> #Store the plot it in a variable plot.var...
>
> plot.var.0ot <- plot(var.0ot, pch=3, cex=0.5, col="red",
> main="No trend removed")
> plot.var.1ot <- plot(var.1ot, pch=3, cex=0.5, col="red",
> main="1st order trend removed")
> plot.var.2ot <- plot(var.2ot, pch=3, cex=0.5, col="red",
> main="2st order trend removed")
>
> #Print the variograms into regions as specified
>
> print(plot.var.0ot, split=c(1,1,3,1), more=T)
> print(plot.var.1ot, split=c(2,1,3,1), more=T)
> print(plot.var.2ot, split=c(3,1,3,1), more=F)
>
> The variograms were plotted OK, however, via that approach I couldn't
> figure out how to change the font size of the subtitles of each graph
> (specified by main="No trend" etc.)'par'or 'title' didn't work or I didn't
> use them right way. Further, I wasn't able to plot the main title
> positioned above the three subtitles and graphs.
>
> So I thought the problem will be sorted if I use 'grid' package as
> plot.gstat Variogram function obeys 'lattice'.
>
> I've created a viewport of 3 by 3 grid layout (after Paul Murrell
> http://www.stat.auckland.ac.nz/~paul/grid/grid.html#docs) and viewport
> tree. First row accommodates main title. This works fine. The second row
> and first column includes just the subtitle 1, second column subtitle 2,
> third column subtitle 3.
>
> Third row is dedicated to the variogram plots. However, they are not
> plotted into the viewports plot1, plot2, plot3, but on the whole page.
>
> The approach was as follows:
>
> top.vp <- viewport(layout = grid.layout(3,3,widths=unit(c(1,1,1), c("null",
> "null", "null")), heights=unit(c(1,1,1), c("lines", "lines", "null"))))
>
> vp.main.title <- viewport(layout.pos.col=c(1:3),layout.pos.row=1,
> name="vp.main.title") vp.subtitle1 <-
> viewport(layout.pos.col=1,layout.pos.row=2, name="vp.subtitle1")
> vp.subtitle2 <- viewport(layout.pos.col=2,layout.pos.row=2,
> name="vp.subtitle2") vp.subtitle3 <-
> viewport(layout.pos.col=3,layout.pos.row=2, name="vp.subtitle3") vp.plot1
> <- viewport(layout.pos.col=1,layout.pos.row=3, name="vp.plot1") vp.plot2 <-
> viewport(layout.pos.col=2,layout.pos.row=3, name="vp.plot2") vp.plot3 <-
> viewport(layout.pos.col=3,layout.pos.row=3, name="vp.plot3")
>
> splot <- vpTree(top.vp, vpList(vp.main.title, vp.subtitle1, vp.subtitle2,
> vp.subtitle3,vp.plot1, vp.plot2, vp.plot3))
>
> pushViewport(splot)
>
> seekViewport("vp.main.title")
> grid.text("main title", gp=gpar(cex=1.2))
> seekViewport("vp.subtitle1")
> grid.text("subtitle 1", gp=gpar(cex=0.8))
> seekViewport("vp.plot1")
> plot(var.0ot, pch=3, cex=0.5, col="red")
>
> I much appreciate any suggestions and criticism.
> Thank you very much in advance.
>
> Michal
>
>
More information about the R-sig-Geo
mailing list