Laurent Rhelp
2022-Dec-11 09:05 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
Ok for the labels but the x-axis is not displayed in log scale ? Le 10/12/2022 ? 22:36, Bert Gunter a ?crit?:> ... and here's a version where the x variable is different than y. > It's basically the same. > > > set.seed(123) > y <- runif(40,min=0, max= 10) > x <- seq(0,10, length = 40) > ## 5 equally spaced groups labeled by log10 of the center > ## of the intervals > xrng <- range(x) > eps <- .0001*c(-1,1)*diff(xrng) ## see ?cut > xrng <-xrng + eps > delta <- diff(xrng)/5 # 5 = number of intervals > brks <- seq(xrng[1], xrng[2],length.out =6) > labs <- round(log10(brks[-1] - delta/2), 2) ## log10 (centers) > groups <- cut(x,breaks = brks, ordered_result = TRUE, > ? ? ? ? ? ? ? labels = paste0('10^',labs)) > # creating the dataframe for the lattice functions > DF <- data.frame( y = y, groups = groups) > > bwplot( y ~ groups > ? ? ? ? , data=DF > ? ? ? ? , scales = list( > ? ? ? ? ? ?y = list(log=T) > ? ? ? ? ), > ) > > On Sat, Dec 10, 2022 at 10:20 AM Bert Gunter <bgunter.4567 at gmail.com> > wrote: > > If Deepayan's suggestion does not suit and especially *if* I > understand what you want to do correctly, then it seems to me that > it is straightforward to create the groups and group labels manually: > > ## in verbose detail to hopefully improve clarity > set.seed(123) ## for reprex > y <- runif(40,min=0, max= 10)? ##*small* reprex > ## cut y into 5 equally spaced groups labeled by log10 of the center > ## of the intervals > yrng <- range(y) > eps <- .0001*c(-1,1)*diff(yrng) ## see ?cut > yrng <-yrng + eps > delta <- diff(yrng)/5 # 5 = number of intervals > brks <- seq(yrng[1], yrng[2],length.out =6) > labs <- round(log10(brks[-1] - delta/2), 2) ## log10 (centers) > groups <- cut(y,breaks = brks, > ? ? ? ? ? ? ? labels = paste0('10^',labs)) > # creating the dataframe for the lattice functions > DF <- data.frame( y = y, groups = groups) > > bwplot( y ~ groups > ? ? ? ? , data=DF > ? ? ? ? , scales = list( > ? ? ? ? ? ?y = list(log=T) > ? ? ? ? ), > ) > > ## Of course, ignore if I have misunderstood. > > Cheers, > Bert > > On Sat, Dec 10, 2022 at 8:03 AM Deepayan Sarkar > <deepayan.sarkar at gmail.com> wrote: > > 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 <http://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 > <http://www.R-project.org/posting-guide.html> > > and provide commented, minimal, self-contained, reproducible > code. > > ______________________________________________ > 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 > <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 [[alternative HTML version deleted]]
Bert Gunter
2022-Dec-11 15:12 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
There can be **no log scale** for the x axis, only labels, if x is a factor (Groups). If what you mean is that there are no tick marks o the x-axis, they can be added in my code in the scales list (for my reprex with 5 levels of group): scales = list( alternating = 1 ## ticls only on bottom , y = list(log=T, tck = c(1,0)) , x = list(at = 1:5, tck = 1) ) If this is not what you meant, you'll need to clarify ... or just move on. -- Bert On Sun, Dec 11, 2022 at 1:06 AM Laurent Rhelp <LaurentRHelp at free.fr> wrote:> Ok for the labels but the x-axis is not displayed in log scale ? > > > > Le 10/12/2022 ? 22:36, Bert Gunter a ?crit : > > ... and here's a version where the x variable is different than y. It's > basically the same. > > > set.seed(123) > y <- runif(40,min=0, max= 10) > x <- seq(0,10, length = 40) > ## 5 equally spaced groups labeled by log10 of the center > ## of the intervals > xrng <- range(x) > eps <- .0001*c(-1,1)*diff(xrng) ## see ?cut > xrng <-xrng + eps > delta <- diff(xrng)/5 # 5 = number of intervals > brks <- seq(xrng[1], xrng[2],length.out =6) > labs <- round(log10(brks[-1] - delta/2), 2) ## log10 (centers) > groups <- cut(x,breaks = brks, ordered_result = TRUE, > labels = paste0('10^',labs)) > # creating the dataframe for the lattice functions > DF <- data.frame( y = y, groups = groups) > > bwplot( y ~ groups > , data=DF > , scales = list( > y = list(log=T) > ), > ) > > On Sat, Dec 10, 2022 at 10:20 AM Bert Gunter <bgunter.4567 at gmail.com> > wrote: > >> If Deepayan's suggestion does not suit and especially *if* I understand >> what you want to do correctly, then it seems to me that it is >> straightforward to create the groups and group labels manually: >> >> ## in verbose detail to hopefully improve clarity >> set.seed(123) ## for reprex >> y <- runif(40,min=0, max= 10) ##*small* reprex >> ## cut y into 5 equally spaced groups labeled by log10 of the center >> ## of the intervals >> yrng <- range(y) >> eps <- .0001*c(-1,1)*diff(yrng) ## see ?cut >> yrng <-yrng + eps >> delta <- diff(yrng)/5 # 5 = number of intervals >> brks <- seq(yrng[1], yrng[2],length.out =6) >> labs <- round(log10(brks[-1] - delta/2), 2) ## log10 (centers) >> groups <- cut(y,breaks = brks, >> labels = paste0('10^',labs)) >> # creating the dataframe for the lattice functions >> DF <- data.frame( y = y, groups = groups) >> >> bwplot( y ~ groups >> , data=DF >> , scales = list( >> y = list(log=T) >> ), >> ) >> >> ## Of course, ignore if I have misunderstood. >> >> Cheers, >> Bert >> >> On Sat, Dec 10, 2022 at 8:03 AM Deepayan Sarkar < >> deepayan.sarkar at gmail.com> wrote: >> >>> 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. >>> >>> ______________________________________________ >>> 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. >>> >> > > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> Sans > virus.www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > <#m_7461191544387978914_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >[[alternative HTML version deleted]]