Juan Perez
2016-Aug-12 16:10 UTC
[R] Adding loess lines subsetting to each panel in lattice plot
Hello, I've created an xyplot and I want to add a loess line for x (Age)?
<=40 and another for values >40. In a way it is similar to this
https://stat.ethz.ch/pipermail/r-help/2009-May/390502.html but still not
succcessful.
This is my try:
xyplot(MOE~Age|Species, groups=Site,
?????? panel = function(x, y, groups=groups,...) {
??????? panel.xyplot(x, y, groups=groups,...)
??? ? ? panel.loess(x,y,subset = x <= 40, col="black")
????????panel.loess(x,y,subset = x >40, col="red")?
????????????? })
When I run the code it "works" but it plots the loess line for all the
data, without subsetting.Any suggestion?
Thank you
[[alternative HTML version deleted]]
Bert Gunter
2016-Aug-12 20:10 UTC
[R] Adding loess lines subsetting to each panel in lattice plot
Try reading ?panel.loess. There is no "subset" argument, so it is of course ignored. -- Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Fri, Aug 12, 2016 at 9:10 AM, Juan Perez via R-help <r-help at r-project.org> wrote:> Hello, I've created an xyplot and I want to add a loess line for x (Age) <=40 and another for values >40. In a way it is similar to this https://stat.ethz.ch/pipermail/r-help/2009-May/390502.html but still not succcessful. > This is my try: > > xyplot(MOE~Age|Species, groups=Site, > panel = function(x, y, groups=groups,...) { > panel.xyplot(x, y, groups=groups,...) > panel.loess(x,y,subset = x <= 40, col="black") panel.loess(x,y,subset = x >40, col="red") > }) > When I run the code it "works" but it plots the loess line for all the data, without subsetting.Any suggestion? > Thank you > > [[alternative HTML version deleted]] > > ______________________________________________ > 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.
Juan Perez
2016-Aug-13 13:31 UTC
[R] Adding loess lines subsetting to each panel in lattice plot
Thanks Bert
I am not sure what you meant by reading though.
I managed to sort this out, although ideally would exist a better solution. I
have created a column in my dataset, and given two codes depending whether older
or younger than 40. Afterwards I have applied
xyplot(MOE~Age|Species, groups=Old,
?????? panel= function(x,y,...){? ## custom panel function to add an overall
loess line
???????? panel.superpose(x,y,...)
???????? panel.loess(x,y,col="black",lwd=2,...)
?????? },
?????? panel.groups = function(x,y,...){
???????? panel.xyplot(x,y,...)
???????? panel.loess(x,y,...)
?????? })
This gives a loess line for data younger than 40, another for the ones older,
and a third one for all the data. I hope this helps to someone else.
Unfortunately, the dataset needs to be modified everytime we want to make a new
or different subset.
Best regards
El Viernes 12 de agosto de 2016 21:10, Bert Gunter <bgunter.4567 at
gmail.com> escribi?:
Try reading ?panel.loess. There is no "subset" argument, so it is of
course ignored.
-- Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Fri, Aug 12, 2016 at 9:10 AM, Juan Perez via R-help
<r-help at r-project.org> wrote:> Hello, I've created an xyplot and I want to add a loess line for x
(Age)? <=40 and another for values >40. In a way it is similar to this
https://stat.ethz.ch/pipermail/r-help/2009-May/390502.html but still not
succcessful.
> This is my try:
>
> xyplot(MOE~Age|Species, groups=Site,
>? ? ? ? panel = function(x, y, groups=groups,...) {
>? ? ? ? panel.xyplot(x, y, groups=groups,...)
>? ? ? ? panel.loess(x,y,subset = x <= 40, col="black")? ? ? ?
panel.loess(x,y,subset = x >40, col="red")
>? ? ? ? ? ? ? })
> When I run the code it "works" but it plots the loess line for
all the data, without subsetting.Any suggestion?
> Thank you
>
>? ? ? ? [[alternative HTML version deleted]]
>
> ______________________________________________
> 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]]
Bert Gunter
2016-Aug-14 11:29 UTC
[R] Adding loess lines subsetting to each panel in lattice plot
Juan:
What I gave you previously was correct, but not "nice". The subscripts
= TRUE argument should have been in the xyplot() call, not the pnl
function. However, it is actually not explicitly needed there either,
because it will default to TRUE if the panel function has a subscripts
argument, which it does (and did -- that's why it worked before). Here
is the more sensible version (cc'ed to the list, which I fortunately
failed to do before):
## set up example
x <- runif(100)
y <- rnorm(100)
fac <- rep(LETTERS[1:4], e= 25)
age <- sample(1:2,50,rep=TRUE)
x <- runif(100)
y <- rnorm(100)
fac <- rep(LETTERS[1:4], e= 25)
age <- runif(100,20,60)
#panel function
pnl <- function(x, y, age, subscripts, ...){
age <- age[subscripts]
old <- age<=40
panel.xyplot(x,y,...)
panel.loess(x,y,col.line = "green")
panel.loess(x[old],y[old],col.line = "red")
panel.loess(x[!old],y[!old],col.line = "blue")
}
xyplot(y~x|fac, age=age, panel=pnl, lay=c(2,2))
Note that my prior comments about moviing the creation of the groups
to the panel function instead of the data still hold, of course.
Cheers,
Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Sat, Aug 13, 2016 at 7:49 AM, Bert Gunter <bgunter.4567 at gmail.com>
wrote:> Inline.
>
> -- Bert
>
>
>
> On Sat, Aug 13, 2016 at 6:31 AM, Juan Perez <beire55 at yahoo.es>
wrote:
>> Thanks Bert
>>
>> I am not sure what you meant by reading though.
>>
>> I managed to sort this out, although ideally would exist a better
solution.
>> I have created a column in my dataset, and given two codes depending
whether
>> older or younger than 40. Afterwards I have applied
>>
>> xyplot(MOE~Age|Species, groups=Old,
>> panel= function(x,y,...){ ## custom panel function to add an
overall
>> loess line
>> panel.superpose(x,y,...)
>> panel.loess(x,y,col="black",lwd=2,...)
>> },
>> panel.groups = function(x,y,...){
>> panel.xyplot(x,y,...)
>> panel.loess(x,y,...)
>> })
>>
>> This gives a loess line for data younger than 40, another for the ones
>> older, and a third one for all the data. I hope this helps to someone
else.
>> Unfortunately, the dataset needs to be modified everytime we want to
make a
>> new or different subset.
>
> Not true. Creating a grouping factor and using panel.groups is
> certainly one way to do it, but it's not the only way. You could
> alternatively create the groups in the panel function by using the
> 'subscripts' argument, something like:
>
> x <- runif(100)
> y <- rnorm(100)
> fac <- rep(LETTERS[1:4], e= 25)
> age <- runif(100,20,60)
> pnl <- function(x,y,age, subscripts=TRUE,...){
> age <- age[subscripts]
> old <- age<=40
> panel.xyplot(x,y,...)
> panel.loess(x,y,col.line = "black")
> panel.loess(x[old],y[old],col.line = "red")
> panel.loess(x[!old],y[!old],col.line = "green")
> }
>
> xyplot(y~x| fac, panel = pnl, age=age,lay=c(2,2))
>
> Cheers,
> Bert
>
>>
>> Best regards
>>
>>
>> El Viernes 12 de agosto de 2016 21:10, Bert Gunter <bgunter.4567 at
gmail.com>
>> escribi?:
>>
>>
>> Try reading ?panel.loess. There is no "subset" argument, so
it is of
>> course ignored.
>>
>> -- Bert
>>
>>
>>
>> Bert Gunter
>>
>> "The trouble with having an open mind is that people keep coming
along
>> and sticking things into it."
>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic
strip )
>>
>>
>> On Fri, Aug 12, 2016 at 9:10 AM, Juan Perez via R-help
>> <r-help at r-project.org> wrote:
>>> Hello, I've created an xyplot and I want to add a loess line
for x (Age)
>>> <=40 and another for values >40. In a way it is similar to
this
>>> https://stat.ethz.ch/pipermail/r-help/2009-May/390502.html but
still not
>>> succcessful.
>>> This is my try:
>>>
>>> xyplot(MOE~Age|Species, groups=Site,
>>> panel = function(x, y, groups=groups,...) {
>>> panel.xyplot(x, y, groups=groups,...)
>>> panel.loess(x,y,subset = x <= 40, col="black")
>>> panel.loess(x,y,subset = x >40, col="red")
>>> })
>>> When I run the code it "works" but it plots the loess
line for all the
>>> data, without subsetting.Any suggestion?
>>> Thank you
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> 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.
>>
>>