contour lines for levelplot

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

contour lines for levelplot

mhofert
Hi,

I would like to add contour lines to a (trellis/lattice-) levelplot.  
Sure, there is the "contour=TRUE" argument, but this uses  
"cuts=..." (which is usually chosen very high for my plots. I guess  
cuts=99 is the best you can do (?)) for plotting the contour lines.  
Furthermore, I do not like the numbering of the contour lines this  
way. Therefore, I tried to add a standard contour plot. There are 2  
problems to do this. First, as I would like to have the levelplot  
with a colorkey, the contour lines are plotted over the colorkey (see  
example code below). I could not fix this problem by changing the  
aspect argument of the levelplot call or by working with xlim and  
ylim in the contour plot function. Second, I am not sure if the  
contour lines added this way actually represent the points they  
should (e.g. does the contour line labeled with 0.5 really hit the  
points of this height?). So, is there a simple way of how to add the  
contour lines (of the contour function) to the levelplot this way? If  
not, is it possible to plot the levelplot with cuts=99 but only draw  
the contour lines (with the option "contour=TRUE" in the levelplot  
call) at specified points? Is it possible to tell the levelplot  
function (with cuts=99) to plot a specified number of contour lines  
(say, only to plot 10 contour lines in the whole existing range of z-
values)?

Thank you very much in advance

Marius
[hidden email]

example code:

remove(list=objects())
x.1<-rep(seq(0,1,by=0.04),each=26)
x.2 <- 0.04*(0:25)
y.1<-rep(x.2,26)
y.2 <- 0.04*(0:25)
z.1 <-x.1*y.1
z.2<- matrix(unlist(z.1),ncol=26,byrow=TRUE)
library(lattice) #for trellis-like graphical plots
plot.new()
levelplot(z.1~x.1*y.1,xlim=c(0,1),ylim=c(0,1),aspect=1,scales=list
(relation="free",tick.number=6),cuts=99,colorkey=list(tick.number=6))
contour(x.2,y.2,z.2,levels=seq(0,1,by=0.1),add=TRUE,col="black")

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: contour lines for levelplot

Deepayan Sarkar
I'm not sure what gave you the idea that there's a limit of 99 contour
lines, but no such limit is intended. You need to read the
documentation of panel.contourplot and use it in a panel function.
Hint:

library(lattice)

levelplot(volcano,
          panel = function(..., at, contour = FALSE, labels = NULL) {
              panel.levelplot(..., at = at, contour = contour, labels = labels)
              panel.contourplot(..., at = c(137, 141), contour = TRUE,
labels = FALSE)
          })

contour (and plot.new) are base graphics functions, they do not
(easily) mix with lattice functions (which are based on the grid
package).

Deepayan

On 2/12/06, Jan Marius Hofert <[hidden email]> wrote:

> Hi,
>
> I would like to add contour lines to a (trellis/lattice-) levelplot.
> Sure, there is the "contour=TRUE" argument, but this uses
> "cuts=..." (which is usually chosen very high for my plots. I guess
> cuts=99 is the best you can do (?)) for plotting the contour lines.
> Furthermore, I do not like the numbering of the contour lines this
> way. Therefore, I tried to add a standard contour plot. There are 2
> problems to do this. First, as I would like to have the levelplot
> with a colorkey, the contour lines are plotted over the colorkey (see
> example code below). I could not fix this problem by changing the
> aspect argument of the levelplot call or by working with xlim and
> ylim in the contour plot function. Second, I am not sure if the
> contour lines added this way actually represent the points they
> should (e.g. does the contour line labeled with 0.5 really hit the
> points of this height?). So, is there a simple way of how to add the
> contour lines (of the contour function) to the levelplot this way? If
> not, is it possible to plot the levelplot with cuts=99 but only draw
> the contour lines (with the option "contour=TRUE" in the levelplot
> call) at specified points? Is it possible to tell the levelplot
> function (with cuts=99) to plot a specified number of contour lines
> (say, only to plot 10 contour lines in the whole existing range of z-
> values)?
>
> Thank you very much in advance
>
> Marius
> [hidden email]
>
> example code:
>
> remove(list=objects())
> x.1<-rep(seq(0,1,by=0.04),each=26)
> x.2 <- 0.04*(0:25)
> y.1<-rep(x.2,26)
> y.2 <- 0.04*(0:25)
> z.1 <-x.1*y.1
> z.2<- matrix(unlist(z.1),ncol=26,byrow=TRUE)
> library(lattice) #for trellis-like graphical plots
> plot.new()
> levelplot(z.1~x.1*y.1,xlim=c(0,1),ylim=c(0,1),aspect=1,scales=list
> (relation="free",tick.number=6),cuts=99,colorkey=list(tick.number=6))
> contour(x.2,y.2,z.2,levels=seq(0,1,by=0.1),add=TRUE,col="black")

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html