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

Laurent Rhelp L@urentRHe|p @end|ng |rom |ree@|r
Sun Dec 11 19:02:22 CET 2022


Thank you very much Deepayan, I will see the help of panel.bwplot.
Best regards
L.


Le 11/12/2022 à 18:53, Deepayan Sarkar a écrit :
> On Sun, Dec 11, 2022 at 11:05 PM Laurent Rhelp <LaurentRHelp using free.fr> wrote:
>> Excellent, it works.
>>
>> But, may you please explain me how xyplot knows that it has to apply
>> panel.bwplot on every groups according to the groups factor ? Because
>> there is only one panel. I introduced the groups argument in order to
>> apply the bwplot function only on the values of every group.
> xyplot() doesn't know that, but panel.bwplot() does. It chooses one of
> the variables as the grouping variable (depending on
> horizontal=TRUE|FALSE); see ?panel.bwplot.
>
> Best,
> -Deepayan
>
>>
>> Le 11/12/2022 à 17:48, Deepayan Sarkar a écrit :
>>> 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