From ggrothendieck at gmail.com  Fri Mar 24 15:25:57 2006
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Fri, 24 Mar 2006 09:25:57 -0500
Subject: [Rd] bug in plot.acf (PR#8705)
In-Reply-To: <20060324125503.E098B183A3@slim.kubism.ku.dk>
References: <20060324125503.E098B183A3@slim.kubism.ku.dk>
Message-ID: <971536df0603240625j4f8ff3d9uc05082063747d4af@mail.gmail.com>

On 3/24/06, murdoch at stats.uwo.ca <murdoch at stats.uwo.ca> wrote:
> (Moved from r-devel to r-bugs)
>
> On 3/24/2006 5:03 AM, Antonio, Fabio Di Narzo wrote:
> > Hi all.
> > There's a bug in plot.acf, when plotting acf for multivariate time series.
> > Here a reproducible example:
> >
> > X <- rnorm(1000)
> > Y <- -X + rnorm(1000, sd=0.6)
> > Z <- cbind(X,Y)
> >
> > In
> > acf(Z)
> > cross-correlation plot y-axis is limited to 0-1. But:
> > acf(Z, ylim=c(-1,1))
> > shows that there was a negative correlation, that was cut away in the
> > previous plot.
> >
> > I've seen the error is trivial. There's something like:
> >
> > for(each pair of univariate time series) {
> > if(is.null(ylim)) {
> > ...#set ylim properly
> > }
> > ...
> > }
> >
> > in plot.acf code, so that in the first iteration the ylim par is properly
> > set to about c(0,1), but in
> > subsequent interations, ylim is no more NULL, and the old, unproper ylim
> > specification
> > remains.
>
> Thanks for noticing this.  It's easy to fix, but before I do, I'd like
> an opinion on the proper fix.  Should all the plots use the same ylim,
> or in the case where it is unspecified, should they each choose their
> own?  I can see arguments for both possibilities.
>


Not sure if its worth considering this but plot.zoo allows ylim to be
a pair or it can be a list of pairs to specify different ylims for each
plot or it can be a labelled list to specify just those indicated with
the unspecified ones being defaulted.  Also if can be a set of data
points in which case its range it used.

z <- zoo(cbind(a = 1:10, b = 11:20, c = 21:30))
plot(z, ylim = list(c(1,20), c(1,40), c(1,60)))
plot(z, ylim = c(1,40))
plot(z, ylim = list(b = c(1,40)))  # a and c get default and b gets
indicated one
plot(z, ylim = list(c(1,40), a = c(1, 10))) # default is c(1,40) and a
is c(1,10)
plot(z, ylim = list(1:40, a = 1:10)) # same



[Rd] bug in plot.acf (PR#8705)
Gabor Grothendieck