Sunny Srivastava
2014-Jul-06 23:35 UTC
[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]]
David Winsemius
2014-Jul-07 03:59 UTC
[R] Question regarding lattice::levelplot and distribution of colors
On Jul 6, 2014, at 4:35 PM, Sunny Srivastava wrote:> 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.I think the fundamental problem is that you are trying to use levelplot with a categorical variable on the RHS of the formula. That is NOT what is expected. You are the one who expanded the X range to c(0,50) and the color range to seq(-0.3, 0.3, length = 20). -- David.> > 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 at 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.David Winsemius Alameda, CA, USA
Duncan Mackay
2014-Jul-07 04:42 UTC
[R] Question regarding lattice::levelplot and distribution of colors
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: mackay at northnet.com.au -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at 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 at 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.