[R] create custom function to annotate a levelplot

Jaime R. Garcia M. jaime.garcia at uni-bonn.de
Tue Jan 26 13:21:51 CET 2010


Dear list users,

I modeled the probability of occurrence of one species: "Cyperus
dilatatus".

I modeled the species using three different approaches:
c("random","target","index")

What I want to achieve is to make a plot of all prediction maps in a row
with to conditional variables, that is, with the species and the
approach

I prepared a data.frame to try with the 'levelplot' function. Please
find attached a file (levelplot.RData) where I saved the following
objects:

all.df  ---- a data frame with coordinates (s1 and s2), predictions (z),
approach used (name), species name (spname)

var ---- a numeric vector with the validation value of each model

This is my initial code:

# ----------------------------------------------------
library(lattice);library(RColorBrewer)
load("levelplot.RData")

# gray colors for display
mypalette = brewer.pal(9, "Greys")

# plot
levelplot(z ~ s1 + s2 | name * spname, data=df,
col.regions=mypalette, at=c(0,.1,.2,.3,.4,.5,.6,.7,.8,1), layout=c(3,1),
xlab=NULL, ylab=NULL,
scales=list(draw=FALSE))
# -----------------------------------------------------

But now I would like to do some adjustments. For example, I would like
to make the font type of the strip where the species name is italic. So
I tried initially:

#--------------------------------
update(trellis.last.object(),
strip=function(...,style,par.strip.text)
strip.default(...,style=1,par.strip.text = list(cex=.8, font=3)))
#----------------------------------

But then also the strip with the model approach turns into italic font
type. So I tried to customize my own strip function like this:

#----------------------------------
mystrip <- 
  function(which.given,which.panel,factor.levels,par.strip.text,...){
    if (which.given == 1){
      par.strip.text = list(cex=.8, font=3)

panel.text(x=0.1,y=0,pos=3,lab=factor.levels[which.panel[which.given]])
    }
    if (which.given == 2){
      par.strip.text = list(cex=.6, font=1)
      panel.text(x=0.5, y=0,lab=factor.levels[which.panel[which.given]])
    }
  }

update(trellis.last.object(), strip=mystrip)
#----------------------------------------

And then everything started going crazy!!!

I would also like to add to each panel, as text, the validation value
for each prediction. So I tried something like this

#-----------------------------------------
mypanel = function(x,y,z,subscripts,...){
	panel.levelplot(x,y,z,subscripts,...)
	ltext(150000, 1600000, labels=paste("AUC =", var[subscripts], sep=" "),
cex=.7)}

update(trellis.last.object(), panel=mypanel)
# --------------------------------------

but it displays only the value for the first map, so something is
telling me that the use of subscripts is not good. So I tried also with
which.packet insted of subscripts with no success.

Finally, I would like to make the strip where the name of the species is
to appear as a large unique strip and not three times repeated.

I hope I am making sense of what I want and looking forward for any
help or directions...

Best,

Jaime -R



More information about the R-help mailing list