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

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Sun Dec 11 16:12:39 CET 2022

```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 using 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 using 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 using 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 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
>>> http://www.R-project.org/posting-guide.html
>>> > and provide commented, minimal, self-contained, reproducible code.
>>>
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>
>