[Rd] Lattice: Drawing a single contour line with a negative value fails

Deepayan Sarkar deepayan.sarkar at gmail.com
Sat Aug 22 10:06:43 CEST 2009


On 8/19/09, Thorn Thaler <thothal at sbox.tugraz.at> wrote:
> Hi everybody,
>
>  I want to add a single contourline to a levelplot. While everything works
> fine if the value at which the line should be drawn is positive, there is an
> error if the value is negative:
>
>  library(lattice)
>  my.panel <- function(..., at, contour=FALSE, labels=NULL) {
>    panel.levelplot(..., at=at, contour=contour, labels=labels)
>    panel.contourplot(..., contour=TRUE, labels="Contour", lwd=2,
>       at=con)
>  }
>
>  x <- y <- 1:100
>  df <- expand.grid(x=x, y=y)
>  df$z <- apply(df, 1, function(x)
>    (x[1]^2+x[2]^2)*ifelse(x[1]^2+x[2]^2 < 5000, -1,1))
>  col.regions <- heat.colors(50)
>
>  # Works
>  con <- 1000
>  levelplot(df$z~df$x+df$y, col.regions=col.regions, panel=my.panel)
>
>  # Does not work
>  con <- -1000
>  levelplot(df$z~df$x+df$y, col.regions=col.regions, panel=my.panel)
>
>  I've tracked down the error to the function "cut.default", which takes an
> argument "breaks", which should be "either a numeric vector of two or more
> cut points or a single number (greater than or equal to 2) giving the number
> of intervals into which 'x' is to be cut."
>
>  So it seems to me that a single contourline at a positive value works
> because the value is interpreted as the number of intervals, even though
> there is just this single line in the resulting plot.
>
>  What would be the correct way to add just a single contour line to a
> levelplot, or is it indeed a bug?

Definitely a bug. It should be easy to fix (but I haven't had time to
get to it yet).

Using something like

con <- c(-1000, NA)

seems to work though.

-Deepayan



More information about the R-devel mailing list