Hi
The first line has a typo it should have been levelplot(zz~ xx+y, testdf,#subset(testdf, xx > 8), from which you could change to the subset if required If you change the values of xx then you have to check which values of zz remain and work out the cutpoints range(subset(testdf, xx > 8, "zz")) [1] -0.17335048 -0.02144387 Which is the range for which the colours change. What you need to do is to change the cutpoints in levelplot and colorkey seq(-0.2,0, 0.025) [1] -0.200 -0.175 -0.150 -0.125 -0.100 -0.075 -0.050 -0.025 0.000 if you want different colours for certain ranges Duncan From: Sunny Srivastava [mailto:research.b...@gmail.com] Sent: Monday, 7 July 2014 18:57 To: Duncan Mackay Cc: R Subject: Re: [R] Question regarding lattice::levelplot and distribution of colors I am sorry but I think I have been unclear. The problem is not color theme. Assume I have the original data.frame. testdf <- structure(list(yy = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("R", "L"), class = c("ordered", "factor")), xx = c(8L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 32L, 33L, 34L, 37L, 38L, 44L, 47L, 48L), zz = c(-0.0509470162236187, -0.127284016213917, -0.148955671035087, -0.142907338502986, -0.160948815798959, -0.173350477727937, -0.161083124553469, -0.14273409035068, -0.0214438692797626, -0.0628618704957434, -0.0877747107755074, -0.0948371137126557, -0.0659475583478307, -0.0601482978919971, -0.0339547824620206, -0.0433516197870341)), .Names = c("yy", "xx", "zz"), row.names = c("25", "26", "27", "28", "29", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220"), class = "data.frame") Based on Duncan's suggestion, I modify it as testdf$y <- ifelse(testdf$yy == "L",1,0) If you look at the 'testdf' data.frame > head(testdf) yy xx zz y 25 R 8 -0.05094702 0 26 R 44 -0.12728402 0 27 R 45 -0.14895567 0 28 R 46 -0.14290734 0 29 R 47 -0.16094882 0 210 R 48 -0.17335048 0 there is only one value for xx = 8 and all the remaining values are between 32 to 50 > sort(testdf$xx) [1] 8 32 33 34 37 38 44 44 45 46 47 47 48 48 49 50 However, when I use levelplot for the modified 'testdf' as suggested by Duncan testcol <- c("#FF0000","#00FF00","#0000FF","#FFA54F", "#00FFFF","#FF00FF","#C00000","#00B414") levelplot(zz~ xx+y, testdf, at = seq(-0.2,0, 0.025), cuts = 8, col.regions = testcol, xlim = c(0, 50), colorkey = list(labels = paste(seq(-0.2,0, 0.025)), at = seq(-0.2,0, 0.025), cex = 1.5) ) I see a 'pink' box from xx = 0 to 20 (for y = 0) and a 'green' box from xx = 20 to 32 (for y=1). These boxes should not be there because there are no xx's in (8, 32). This probably happens because there is only one xx = 8 and all the remaining xx's are >=32. If I remove xx = 8 from the plot by using 'subset = xx > 8', then everything appears as it should. That is why I had used xlim = c(0, 50). levelplot(zz~ xx+y, testdf, subset = xx > 8, at = seq(-0.2,0, 0.025), cuts = 8, col.regions = testcol, xlim = c(0, 50), colorkey = list(labels = paste(seq(-0.2,0, 0.025)), at = seq(-0.2,0, 0.025), cex = 1.5) ) This is problem might be due to my 'pathological' data set. If yes, then is there a lattice-y way to get around it? If levelplot is the wrong function for such needs, then please accept my sincere apologies. Thanks for your patience. Best, S. On Mon, Jul 7, 2014 at 12:42 AM, Duncan Mackay <dulca...@bigpond.com> wrote: Your y values are not of the type required by levelplot ? levelplot I prefer not to use themes as they do not suit my data here is a way to get what you want - colours are a bit garish but they are some easily to hand breaks/cuts are just what came in a reasonable sequence - yours to change testdf$y <- ifelse(testdf$yy == "L",1,0) levelplot(zz ~ xx + y, testdf, par.settings = custom.theme.2(), scales = list(x = list(cex = 0.5, rot=90), y = list(cex = 0.5), alternating = FALSE), xlim = c(0, 50), at = seq(-0.3, 0.3, length = 20), panel = function(x, y, z, ...) { panel.levelplot(x, y, z,...) }, colorkey=list(labels = list(cex = 1.5)) ) testcol <- c("#FF0000","#00FF00","#0000FF","#FFA54F", "#00FFFF","#FF00FF","#C00000","#00B414") levelplot(zz~ xx+y, testdf,#subset(testdf, xx > 0), at = seq(-0.2,0, 0.025), cuts = 8, col.regions = testcol, scales = list(x = list(cex = 0.5, rot = 90), y = list(cex = 0.5), alternating = FALSE), xlim = c(0, 50), colorkey = list(labels = paste(seq(-0.2,0, 0.025)), at = seq(-0.2,0, 0.025), cex = 1.5) ) Duncan Duncan Mackay Department of Agronomy and Soil Science University of New England Armidale NSW 2351 Email: home: mac...@northnet.com.au -----Original Message----- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of Sunny Srivastava Sent: Monday, 7 July 2014 09:35 To: R mailing list Subject: [R] Question regarding lattice::levelplot and distribution of colors Hello R-helpers: I think there is some problem with my code, but I would like to seek you help because I can't spot it. I have a data.frame defined as follows: testdf <- structure(list(yy = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("R", "L"), class = c("ordered", "factor")), xx = c(8L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 32L, 33L, 34L, 37L, 38L, 44L, 47L, 48L), zz = c(-0.0509470162236187, -0.127284016213917, -0.148955671035087, -0.142907338502986, -0.160948815798959, -0.173350477727937, -0.161083124553469, -0.14273409035068, -0.0214438692797626, -0.0628618704957434, -0.0877747107755074, -0.0948371137126557, -0.0659475583478307, -0.0601482978919971, -0.0339547824620206, -0.0433516197870341)), .Names = c("yy", "xx", "zz"), row.names = c("25", "26", "27", "28", "29", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220"), class = "data.frame") I would like to see a 'levelplot' of yy vs xx, but the value of xx creates problem in the distribution of colors. I am guessing it is due to the value of xx = 8. The levelplot below seems to be fine. library(latticeExtra) ## ok; note the subset argument! levelplot(zz ~ xx + yy, testdf, par.settings = custom.theme.2(), subset = xx != 8, scales = list(x = list(cex = 0.5, rot=90), y = list(cex = 0.5), alternating = FALSE), xlim = c(0, 50), at = seq(-0.3, 0.3, length = 20), panel = function(x, y, z, ...) { panel.levelplot(x, y, z,...) }, colorkey=list(labels = list(cex = 1.5)) ) If I remove the subsetting of xx != 8, then the distribution of colors is wrong. Specifically, it ranges from xx =1 to 20 for y = R, which is incorrect. What am I missing here? Note that using the default color scheme has no effect. ## seems to be a bug ? see xx = 1 to 20; note that the subset argument is removed levelplot(zz ~ xx + yy, testdf, par.settings = custom.theme.2(), scales = list(x = list(cex = 0.5, rot=90), y = list(cex = 0.5), alternating = FALSE), xlim = c(0, 50), at = seq(-0.3, 0.3, length = 20), panel = function(x, y, z, ...) { panel.levelplot(x, y, z,...) }, colorkey=list(labels = list(cex = 1.5)) ) Thanks, S. [[alternative HTML version deleted]] ______________________________________________ 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. [[alternative HTML version deleted]] ______________________________________________ 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.