[R] Change labels of x-axes in Plot of stl() function?

Gabor Grothendieck ggrothendieck at gmail.com
Thu Dec 8 02:08:27 CET 2005


I noticed that we can combine the function and proto
approaches by placing the proto in the function with
these advantages:

1. the function body can be reduced to just two statements
2. no explicit manipulation of environments via
   environment(...) is required (as proto does that itself
   automatically)

In our new solution, the function signature and the
redefinition of mtext are the same as in our prior function
solution but the remaining lines in the function solution
(that manipulate environments) are replaced with the single
'with' command as shown.

As before, placing stats:::plot.stl in the proto results in
(1) a copy of that function being placed in the proto object and
(2) the environment of that copy being set to the proto object itself

The parent of that proto object defaults to its lexical environment
so all we need to do in order to ensure that xlab and the new mtext
are accessible from the copy of plot.stl are to ensure that they
are in that parent environment -- they need not be in the proto
object itself.  They will be accessed via inheritance anyways.  Thus
the solution reduces to just:

library(proto)
plot.stl <- function(..., xlab = "time") {
	mtext <- function(text, ...)
		graphics::mtext(if (text == "time") xlab else text, ...)
	with( proto(plot.stl = stats:::plot.stl), plot.stl(...) )
}

# test
example(stl)  # defines stdm for use in the test
plot.stl(stdm, xlab = "My xlab")


On 12/7/05, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> This should fix that problem:
>
> plot.stl <- function(..., xlab = "time") {
>        mtext <- function(text, ...)
>                  graphics::mtext(if (text == "time") xlab else text, ...)
>        plot.stl <- stats:::plot.stl
>        environment(plot.stl) <- environment()
>        plot.stl(...)
> }
>
>
> Also for the proto solution try this:
>
> library(proto)
> STL <- proto(plot.stl = stats:::plot.stl,
>        mtext = function(text, ...)
>                   graphics::mtext(if (text == "time") xlab else text, ...),
>        xlab = "time (decade)")
>
> # test.  First line computers stmd to be used as test data.
> example(stl)
> with(STL, plot.stl(stmd))
>
>
>
>
>
> On 12/7/05, Jan Verbesselt <Jan.Verbesselt at biw.kuleuven.be> wrote:
> > Thanks a lot!
> >
> > However, it's not working perfectly yet. The function plot.stl now also
> > changes the labels of Data, Seasonal, Trend, and Remainder to the text
> > defined for "xlab". How could this be fine-tuned?
> >
> > Regards,
> > Jan
> >
> > > -----Original Message-----
> > > From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> > > Sent: Wednesday, December 07, 2005 5:07 PM
> > > To: Jan Verbesselt
> > > Cc: r-help at stat.math.ethz.ch
> > > Subject: Re: [R] Change labels of x-axes in Plot of stl() function?
> > >
> > > If you look through the output of:
> > >
> > > stats:::plot.stl
> > >
> > > you see right near the end that "time" is hard coded in the call to mtext.
> > >
> > > However, we could temporarily redefine mtext so that it works as you
> > > wish and then redefine plot.stl so that it looks within the environment
> > > of our function to find mtext (rather than looking in the stats package):
> > >
> > > plot.stl <- function(..., xlab = "time") {
> > >       mtext <- function(text, ...) graphics::mtext(xlab, ...)
> > >       plot.stl <- stats:::plot.stl
> > >       environment(plot.stl) <- environment()
> > >       plot.stl(...)
> > > }
> > >
> > > # test it
> > > example(stl)
> > > plot.stl(stmd, xlab = "X")
> > >
> > >
> > >
> > > On 12/7/05, Jan Verbesselt <Jan.Verbesselt at biw.kuleuven.be> wrote:
> > > > Hi all,
> > > >
> > > > How can the label of the x-axes in the plot() of a stl.object be
> > > adapted?
> > > >
> > > > e.g.,
> > > >
> > > > When plotting:     plot(stl(nottem, "per"))
> > > >
> > > > In the labels of the x-axes is "time". How can this be changed to e.g.,
> > > > "Time (dekade) "?
> > > >
> > > > It does not work with xlab or others anymore…
> > > >
> > > >
> > > >
> > > > Thanks,
> > > >
> > > > Jan
> > > >
> > > > _______________________________________________________________________
> > > > Ir. Jan Verbesselt
> > > > Research Associate
> > > > Biosystems Department ~ M³-BIORES
> > > > Vital Decosterstraat 102, 3000 Leuven, Belgium
> > > > Tel: +32-16-329750   Fax: +32-16-329760
> > > > http://gloveg.kuleuven.ac.be/
> > > > _______________________________________________________________________
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> > > >
> > > >
> > > >        [[alternative HTML version deleted]]
> > > >
> > > >
> > > >
> > > > ______________________________________________
> > > > R-help at stat.math.ethz.ch mailing list
> > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > > PLEASE do read the posting guide! http://www.R-project.org/posting-
> > > guide.html
> > > >
> > > >
> >
> >
> > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> >
> >
>




More information about the R-help mailing list