Re: [R] scale caption on levelplot
On Dec 4, 2010, at 8:25 AM, Andrew Collier wrote: hi, i am trying to figure out how to put a caption on the colour scale of a levelplot. there does not seem to be an option for this in levelplot(). Agreed. I could not find one in the levelplot help page or in the chapter of Lattice on legends and keys. Sarkar basically says you need to use grid calls if you want to go beyond the basics. i tried using mtext() but as soon as you put the text far out enough on the right of the plot, it goes beyond the plot boundary. so i tried to extend the margin on the right of the plot using par(mar) but this did not have any effect on the plot area. i would really appreciate some help with this because having a caption on a colour scale is rather fundamental and certainly something that a journal referee is going to pick up on! Your question has no reproducible example but suggests that you do not understand that levelplot is a lattice function and that lattice uses grid graphics. The par arguments that lattice understands (or is willing to deal with gracefully) are passed through trellis.par.set(). The current settings are accessible with: trellis.par.get() Since lattice is implemented with grid graphics, you may get useful information from: require(grid) # lattice apparently loads gpar and its help page but doesn't # actually load grid. (I don't understand this. ) ?gpar() # Which has examples that may allow you to get a better understanding # of how to layer new material on top of existing grid graphics. -- David Winsemius, MD West Hartford, CT __ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Re: [R] scale caption on levelplot
Andrew, see below On 2010-12-04 08:25, David Winsemius wrote: On Dec 4, 2010, at 8:25 AM, Andrew Collier wrote: hi, i am trying to figure out how to put a caption on the colour scale of a levelplot. there does not seem to be an option for this in levelplot(). Agreed. I could not find one in the levelplot help page or in the chapter of Lattice on legends and keys. Sarkar basically says you need to use grid calls if you want to go beyond the basics. i tried using mtext() but as soon as you put the text far out enough on the right of the plot, it goes beyond the plot boundary. so i tried to extend the margin on the right of the plot using par(mar) but this did not have any effect on the plot area. i would really appreciate some help with this because having a caption on a colour scale is rather fundamental and certainly something that a journal referee is going to pick up on! Your question has no reproducible example but suggests that you do not understand that levelplot is a lattice function and that lattice uses grid graphics. The par arguments that lattice understands (or is willing to deal with gracefully) are passed through trellis.par.set(). The current settings are accessible with: trellis.par.get() Since lattice is implemented with grid graphics, you may get useful information from: require(grid) # lattice apparently loads gpar and its help page but doesn't # actually load grid. (I don't understand this. ) ?gpar() # Which has examples that may allow you to get a better understanding # of how to layer new material on top of existing grid graphics. As David says, you need to use trellis parameters, in this case presumably trellis.par.get('layout.widths') and trellis.par.get('layout.heights') will be useful. You can add appropriate settings to your levelplot() call with the par.settings argument. After you adjust the amount of space you want, you can then use grid::grid.text() to add your text. Here's an example: library(grid) x - sort(rnorm(100,50,10)) y - sort(runif(100,0,20)) d - expand.grid(x=x, y=y) d$z - x + y graphics.off() p - levelplot(z ~ x*y, d, par.settings=list( layout.widths=list(right.padding=4), layout.heights=list(top.padding=6)), colorkey = TRUE) print(p) ## now add the text grid.text('here and there', x=.98, y=.5, rot=-90, gp = gpar(col=4, fontfamily=HersheyGothicEnglish, cex=2)) grid.text('here\nand\nthere', x=.88, y=.92, gp = gpar(lineheight=.75, col=3)) Peter Ehlers __ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Re: [R] scale caption on levelplot
hi peter and david, thanks for the excellent suggestions. here is something like what i am finally using (those fancy fonts were really tempting, but i chose something a little more mundane!): library(lattice) x - sort(rnorm(100,50,10)) y - sort(runif(100,0,20)) d - expand.grid(x=x, y=y) d$z - x + y plot.new() p = levelplot(z ~ x*y, d, par.settings=list( layout.widths=list(right.padding=4)), colorkey = TRUE) print(p) mtext(CAPTION, 4, 1) your help really appreciated! best regards, andrew. -- Andrew B. Collier Physicist Waves and Space Plasmas Group Hermanus Magnetic Observatory Honorary Senior Lecturer tel: +27 31 2601157 Space Physics Research Institute fax: +27 31 2607795 University of KwaZulu-Natal, Durban, South Africagsm: +27 83 3813655 __ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Re: [R] scale caption on levelplot
On 2010-12-04 21:29, Andrew Collier wrote: hi peter and david, thanks for the excellent suggestions. here is something like what i am finally using (those fancy fonts were really tempting, but i chose something a little more mundane!): library(lattice) x- sort(rnorm(100,50,10)) y- sort(runif(100,0,20)) d- expand.grid(x=x, y=y) d$z- x + y plot.new() p = levelplot(z ~ x*y, d, par.settings=list( layout.widths=list(right.padding=4)), colorkey = TRUE) print(p) mtext(CAPTION, 4, 1) Even if that worked (it doesn't for me), you're still mixing base (or tradtional) graphics with lattice graphics. Not a good idea. I would replace the plot.new call with trellis.device() and then, after the levelplot, replace the mtext with grid.text(...) as I suggested originally. You'll have to fiddle a bit with the x location but that should be easy to get the way you want. One more thing, since you imply that this is for publication, it's a good idea to create the plot close to the size that will ultimately be printed; resizing is always better avoided. Peter Ehlers your help really appreciated! best regards, andrew. __ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.