# [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 10:03:13 CET 2022

```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 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

```