On Tue, 2007-02-27 at 15:24 -0200, Alberto Monteiro
wrote:> Is there any way to give a "decent" title after I plot something
> generated by decompose?
>
> For example:
>
> # generate something with period 12
> x <- rnorm(600) + sin(2 * pi * (1:600) / 12)
>
> # transform to a monthy time series
> y <- ts(x, frequency=12, start=c(1950,1))
>
> # decompose
> z <- decompose(y)
>
> # plot
> plot(z)
>
> Now, the title is the ugly "Decomposition of additive time
series".
> How can do this with a decent title, like "Analysis of UFO
abductions"?
>
> Alberto Monteiro
It is because plot.decompose.ts decides to impose it's own title for
some reason (using getAnywhere(plot.decompose.ts) to get the function
definition):
function (x, ...)
{
plot(cbind(observed = x$random + if (x$type == "additive")
x$trend + x$seasonal
else x$trend * x$seasonal, trend = x$trend, seasonal = x$seasonal,
random = x$random), main = paste("Decomposition of",
x$type, "time series"), ...)
}
I'd just write your own wrapper instead, using plot.decompose.ts, along
the lines of:
decomp.plot <- function(x, main = NULL, ...)
{
if(is.null(main))
main <- paste("Decomposition of", x$type, "time series")
plot(cbind(observed = x$random + if (x$type == "additive")
x$trend + x$seasonal
else x$trend * x$seasonal, trend = x$trend, seasonal = x$seasonal,
random = x$random), main = main, ...)
}
#then to complete your example:
# generate something with period 12
x <- rnorm(600) + sin(2 * pi * (1:600) / 12)
# transform to a monthy time series
y <- ts(x, frequency=12, start=c(1950,1))
# decompose
z <- decompose(y)
# plot
decomp.plot(z, main = "Analysis of UFO abductions")
Perhaps you could also file a bug report under the wish list category,
showing your example and the fact that
plot(z, main = "Analysis of UFO abductions")
gives this error:
Error in plotts(x = x, y = y, plot.type = plot.type, xy.labels xy.labels, :
formal argument "main" matched by multiple actual arguments
It isn't really a bug, but an infelicity in the way the function
currently works - my decomp.plot function may even be a suitable patch
or maybe the following is better:
decomp.plot2 <- function(x, main, ...)
{
if(missing(main))
main <- paste("Decomposition of", x$type, "time series")
plot(cbind(observed = x$random + if (x$type == "additive")
x$trend + x$seasonal
else x$trend * x$seasonal, trend = x$trend, seasonal = x$seasonal,
random = x$random), main = main, ...)
}
HTH
G
--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Gavin Simpson [t] +44 (0)20 7679 0522
ECRC, UCL Geography, [f] +44 (0)20 7679 0565
Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk
Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/
UK. WC1E 6BT. [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%