Deepayan Sarkar
2022-Dec-10 16:02 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
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 at 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 at 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.
Bert Gunter
2022-Dec-10 18:20 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
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 at
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 at
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 at 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.
>
> ______________________________________________
> R-help at 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.
>
[[alternative HTML version deleted]]
Laurent Rhelp
2022-Dec-11 09:03 UTC
[R] lattice: how to use a log scale on the x-axis with the bwplot function
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 at
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 at 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