[R] lattice: how to use a log scale on the x-axis with the bwplot function

Deepayan Sarkar deep@y@n@@@rk@r @end|ng |rom gm@||@com
Sun Dec 11 17:48:37 CET 2022


On Sun, Dec 11, 2022 at 2:33 PM Laurent Rhelp <LaurentRHelp using 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 using 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 using 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



More information about the R-help mailing list