[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