Skip to content

lattice contourplot line types

3 messages · Sundar Dorai-Raj, Andrew Beckerman

#
Dear all -

I would like to adjust the line type of specific contours in  
contourplot from the lattice package, but it seems like lty does not  
take a list in the call.

Here is my call to contourplot:

contourplot(preds~size+trt|Size.Name,
	data=pred.dat,layout=c(2,4),
	at=c(0.025,0.5,0.975),
	par.strip.text=list(cex=1.2),
	scales=list(cex=0.5),
	xlab=list("Size",cex=1.2),
	ylab=list("Treatment",cex=1.2),
	panel=function(x,y,z,...){
		panel.contourplot(x,y,z,lwd=1,...)
		panel.grid(h=-1,v=-1,col="grey",...)})

I would like to specify lty=c(2,1,2) corresponding to the  
at=c(0.025,0.5,0.975), and have tried this in both the core part of  
the call, and in panel.countourplot.  However, it only recognises the  
first type.

If there is no straightforward answer, I can provide the data.

Best wishes,
Andrew

R version 2.8.1 (2008-12-22)
i386-apple-darwin8.11.1

locale:
en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] MASS_7.2-45     lattice_0.17-17

loaded via a namespace (and not attached):
[1] grid_2.8.1
#
The only way I can figure out to do this is to use two calls to
panel.contourplot:

library(lattice)
x <- seq(-2, 2, length = 20)
y <- seq(-2, 2, length = 20)
grid <- expand.grid(x=x, y=y)
grid$z <- dnorm(grid$x) * dnorm(grid$y)
contourplot(z ~ x * y, grid,
            panel = function(at, lty, col, ...) {
              at.o <- at[seq(1, length(at), 2)]
              at.e <- at[seq(2, length(at), 2)]
              panel.contourplot(at = at.o, lty = 1, col = "blue", ...)
              panel.contourplot(at = at.e, lty = 4, col = "red", ...)
            },
            at = pretty(grid$z, 10))

HTH,

--sundar

On Sun, Feb 22, 2009 at 12:45 PM, Andrew Beckerman
<a.beckerman at sheffield.ac.uk> wrote:
#
Sundar -

Thanks for the help!  Here is my modified code.  Just what I wanted.   
However, it is odd that the at= call in contourplot won't take a  
single value - I have had to trick it into plotting the "0" contour  
along with the 0.5 to make this work.

contourplot(preds~size+trt|Size.Name,
	data=pred.dat,layout=c(2,4),
	par.strip.text=list(cex=1.2),
	scales=list(cex=0.5),
	xlab=list("Size",cex=1.2),
	ylab=list("Treatment",cex=1.2),
	panel=function(at,lty,...){
		at.1<-c(0,0.5)
		at.2<-c(0.025,0.975)
		panel.contourplot(at=at.1,lty=1,...)
		panel.contourplot(at=at.2,lty=2,...)
		panel.grid(h=-1,v=-1,col="grey",...)})

Andrew
On 22 Feb 2009, at 21:25, Sundar Dorai-Raj wrote:

            
++++++++++++++++++++++++++++++++++++
Dr. Andrew Beckerman
Department of Animal and Plant Sciences
University of Sheffield
Sheffield S10 2TN
UK

a.beckerman at sheffield.ac.uk