Laurent Rhelp
2022-Dec-11 09:03 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
I understand the idea but I did not succeed. Here is what I tried: ## 1. ?? middles of classes calculation m <- tapply(DF$x, groups, mean) ## 2.???? create a new factor columns with the levels deduced from ##???????? the values of the middles of the classes ## DF$m <- DF$groups levels(DF$m) <- as.character(m) DF$m <- as.numeric(levels(DF$m))[DF$m] ## 3. I verify with xyplot xyplot(?? y ~ m ????????? , type = "p" ????????? , data=DF ????????? , scales = list( ??????????? y = list(log=T) ??????????? , x = list(log=T) ????????? ) ) ## 4. I use the panel.groups and panel.bwplot to display the boxplots without success xyplot(?? y ~ m ????????? , groups = groups ????????? , type = "p" ????????? , data=DF ????????? , scales = list( ??????????? y = list(log=T) ??????????? , x = list(log=T) ??????????? , panel = panel.superpose ??????????? ,? panel.groups=function(x,y, group.number,...){ ????????????? panel.xyplot(x,y,...) ????????????? panel.bwplot(x,y,...) ??????????? } ??????????? , horizontal = FALSE ??????????? , box.width = .0001 ????????? ) ) thx Le 10/12/2022 ? 17:02, Deepayan Sarkar a ?crit?:> Log-scales for the "factor" variable in bwplot() is not allowed. > > You could, however, use the panel function panel.bwplot() with > xyplot(num ~ num). The potential problem with that is the box widths, > which panel.bwplot() will not know how to compute. > > See if the following gives you a reasonable starting point: > > DF <- within(DF, m <- tapply(y, groups, mean)) > xyplot(y ~ m, DF, scales = list(log = TRUE), > panel = panel.bwplot, horizontal = FALSE, > box.width = .0001) > > Best, > -Deepayan > > On Sat, Dec 10, 2022 at 7:46 PM Laurent Rhelp <LaurentRHelp at free.fr> wrote: >> Dear R-Help list, >> >> I would like to use bwplot from the lattice package with a log scale >> both on >> the x-axis and the y-axis but I do not know how to do that because I do >> not know >> how to change the factor x-axis in a numeric x-axis. >> >> Here is my example: >> >> >> library(lattice) >> >> # the mock data >> y <- runif(100000,min=0, max=500) >> x <- seq(0,500,length=length(y)) >> # I cut the x variable to create a factor variable in order to calculate >> the boxes >> groups <- cut(x,10,ordered_result = TRUE) >> # creating the dataframe for the lattice functions >> DF <- data.frame( x= x , y = y, groups = groups) >> >> >> ## ok for xyplot >> xyplot( y ~ x >> , data=DF >> , scales = list( >> y = list(log=T) >> , x = list(log=T) >> >> ) >> ) >> >> ## ok for bwplot with the log scale for the y-axis >> bwplot( y ~ groups >> , data=DF >> , scales = list( >> y = list(log=T) >> # , x = list(log=T) >> >> ) >> ) >> >> >> >> ## Non ok for bwplot with the log scale for the x-axis >> bwplot( y ~ groups >> , data=DF >> , scales = list( >> y = list(log=T) >> , x = list(log=T) >> >> ) >> ) >> which gives an error because the x-axis is a factor, I would like to >> replace it >> for the display by the meddle of every class for example and put a log >> scale on the x-axis. >> >> Thank you for your help >> Best regards >> Laurent >> >> >> >> -- >> Cet e-mail a ?t? v?rifi? par le logiciel antivirus d'Avast. >> www.avast.com >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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.-- Cet e-mail a ?t? v?rifi? par le logiciel antivirus d'Avast. www.avast.com
Deepayan Sarkar
2022-Dec-11 16:48 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
On Sun, Dec 11, 2022 at 2:33 PM Laurent Rhelp <LaurentRHelp at free.fr> wrote:> > I understand the idea but I did not succeed. > > Here is what I tried: > > ## 1. middles of classes calculation > > m <- tapply(DF$x, groups, mean) > > ## 2. create a new factor columns with the levels deduced from > ## the values of the middles of the classes > ## > > DF$m <- DF$groups > levels(DF$m) <- as.character(m) > DF$m <- as.numeric(levels(DF$m))[DF$m] > > ## 3. I verify with xyplot > > xyplot( y ~ m > , type = "p" > , data=DF > , scales = list( > y = list(log=T) > , x = list(log=T) > > ) > ) > ## 4. I use the panel.groups and panel.bwplot to display the boxplots > without success > > xyplot( y ~ m > , groups = groups > , type = "p" > , data=DF > , scales = list( > y = list(log=T) > , x = list(log=T) > , panel = panel.superpose > , panel.groups=function(x,y, group.number,...){ > panel.xyplot(x,y,...) > panel.bwplot(x,y,...) > } > , horizontal = FALSE > , box.width = .0001 > ) > )You have a typo here: x = list(log=T) should be followed by a close-paren to complete scales. But I don't understand from your specification why you need groups and panel.superpose etc. What is wrong with xyplot( y ~ m ## , groups = groups # why? , data=DF , scales = list( y = list(log=T) , x = list(log=T) ) , panel = panel.bwplot , horizontal = FALSE , box.width = .0001 ) ? And sorry for my wrong calculation of m earlier, but you can simplify your version to m <- tapply(DF$x, groups, mean) DF$m <- as.vector(m[DF$groups]) Best, -Deepayan> > > thx > > > > Le 10/12/2022 ? 17:02, Deepayan Sarkar a ?crit : > > Log-scales for the "factor" variable in bwplot() is not allowed. > > > > You could, however, use the panel function panel.bwplot() with > > xyplot(num ~ num). The potential problem with that is the box widths, > > which panel.bwplot() will not know how to compute. > > > > See if the following gives you a reasonable starting point: > > > > DF <- within(DF, m <- tapply(y, groups, mean)) > > xyplot(y ~ m, DF, scales = list(log = TRUE), > > panel = panel.bwplot, horizontal = FALSE, > > box.width = .0001) > > > > Best, > > -Deepayan > > > > On Sat, Dec 10, 2022 at 7:46 PM Laurent Rhelp <LaurentRHelp at free.fr> wrote: > >> Dear R-Help list, > >> > >> I would like to use bwplot from the lattice package with a log scale > >> both on > >> the x-axis and the y-axis but I do not know how to do that because I do > >> not know > >> how to change the factor x-axis in a numeric x-axis. > >> > >> Here is my example: > >> > >> > >> library(lattice) > >> > >> # the mock data > >> y <- runif(100000,min=0, max=500) > >> x <- seq(0,500,length=length(y)) > >> # I cut the x variable to create a factor variable in order to calculate > >> the boxes > >> groups <- cut(x,10,ordered_result = TRUE) > >> # creating the dataframe for the lattice functions > >> DF <- data.frame( x= x , y = y, groups = groups) > >> > >> > >> ## ok for xyplot > >> xyplot( y ~ x > >> , data=DF > >> , scales = list( > >> y = list(log=T) > >> , x = list(log=T) > >> > >> ) > >> ) > >> > >> ## ok for bwplot with the log scale for the y-axis > >> bwplot( y ~ groups > >> , data=DF > >> , scales = list( > >> y = list(log=T) > >> # , x = list(log=T) > >> > >> ) > >> ) > >> > >> > >> > >> ## Non ok for bwplot with the log scale for the x-axis > >> bwplot( y ~ groups > >> , data=DF > >> , scales = list( > >> y = list(log=T) > >> , x = list(log=T) > >> > >> ) > >> ) > >> which gives an error because the x-axis is a factor, I would like to > >> replace it > >> for the display by the meddle of every class for example and put a log > >> scale on the x-axis. > >> > >> Thank you for your help > >> Best regards > >> Laurent > >> > >> > >> > >> -- > >> Cet e-mail a ?t? v?rifi? par le logiciel antivirus d'Avast. > >> www.avast.com > >> > >> ______________________________________________ > >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> 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. > > > > -- > Cet e-mail a ?t? v?rifi? par le logiciel antivirus d'Avast. > www.avast.com