[R] Odp: RES: bug in axis.Date? was (Re: newbie needs help plotting timeseries)

Petr PIKAL petr.pikal at precheza.cz
Wed Jul 2 14:57:07 CEST 2008


Hi

r-help-bounces at r-project.org napsal dne 02.07.2008 14:17:00:

> You can do this plot saying to R that your file is a time series with 
the
> ts() function.
> 
> 
> serie=ts(x,....)
> and then you use plot(serie)

Yes and no. Of course that it can be plotted but the original problem was

Error in axis(side, at = z, labels = labels, ...) : 
  'at' and 'labels' lengths differ, 50 != 54

and we found out that this was when you have not all x values finite 
(starting or ending part of your data are NA). In that case using 
axis.Date results in this error. You can try it by

x<-seq(as.Date("2004-01-01"), as.Date("2008-06-01"),by="month")
x[50:54] <-NA
y <- seq(405,410,length=54)
y[50:54] <-NA
plot(x, y, axes=FALSE, ylim=c(405,410),col="red", pch=15,
type="o", ylab="metres above sea level", main="Main Plot Title")
axis(2, at=405:410, tck=1, col="gray60")
axis.Date(1, at=seq(as.Date("2004-01-01"), as.Date("2008-06-01"),
by="month"), labels=seq(as.Date("2004-01-01"), as.Date("2008-06-01"),
by="month"), tck=1, col="gray60")

If you use x[50:52] as NA values everything is OK. So the function is not 
able to correctly handle series which are on one or another end not 
defined and user still wants x axis to be **labeled** in full length 
despite there are missing data on on end, which seem to me not uncommon.
The plotting itself is not a problem, custom axis labeling is.

Regards
Petr

> 
> -----Mensagem original-----
> De: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]Em
> nome de Petr PIKAL
> Enviada em: quarta-feira, 2 de julho de 2008 05:04
> Para: Kathi
> Cc: r-help at stat.math.ethz.ch
> Assunto: [R] bug in axis.Date? was (Re: newbie needs help plotting
> timeseries)
> 
> 
> Hi
> 
> "Kathi" <kathi at dropnet.ch> napsal dne 01.07.2008 18:48:47:
> 
> > On Tue, 1 Jul 2008 14:33:12 +0200, Petr PIKAL wrote
> > > "Kathi" <kathi at dropnet.ch> napsal dne 01.07.2008 13:39:18:
> > >
> > > > Thanks, Petr.
> > > >
> > > > After fiddling around some more with my code I found out that this
> seems
> > > to
> > > > have something to do
> > > > with the number of records the table I'm reading (here: column
> B112).
> > > Somehow,
> > > > changing the
> > > > number of records for B112 changes the numbers in the error 
message
> -
> > > though I
> > > > don't quite
> > > > understand how the number of records influences the axis intervals
> or
> > > their
> > > > labels, since I define
> > > > those explicitly...
> > >
> > > Neither I. So I sent it to r-help maybe somebody else will know. If
> > > you debug code of axis.Date you find that after some computing there
> > > is this comparison where range is based on your input data (in your
> > > case x), and z is from defined at sequence of dates.
> > >
> > > z <- z[z >= range[1] & z <= range[2]]
> > >
> > > and this comparison results in character(0), when plotting with this
> > > artificial example.
> > >
> > > plot(1:100, seq(405,410,length=100), axes=FALSE, ylim=c(405,410),
> > > col="red", pch=15,
> > > type="o", ylab="metres above sea level", main="Main Plot Title")
> > > axis(2, at=405:410, tck=1, col="gray60")
> > > axis.Date(1, at=seq(as.Date("2004-01-01"), as.Date("2008-06-01"),
> > > by="month"), labels=seq(as.Date("2004-01-01"), 
as.Date("2008-06-01"),
> > > by="month"), tck=1, col="gray60")
> > >
> > > I presume, that your x is from different interval of dates or it is
> > > not a date.
> >
> > My data comes from a groundwater monitoring program. Once a month the
> water surface is
> > measured in some 170 stations, and I've been using R to visualize 
these
> > measurements. In this
> > particular case, the water table ranges between approximately 406 and
> 408
> > metres above sea level,
> > hence the y axis interval between 405 and 410.
> > The values of my column x are dates of the format YYYY-MM-DD. If
> something
> > were wrong there,
> > then I guess I would not be able to plot my data at all. But using the
> limits
> > of 2004-01-01 and
> > 2008-06-01, I can plot all the timelines for my 170 measuring stations
> without
> > any problem. But
> > since it's now July, I wanted to shift the view by half a year. So I
> used
> > "search and replace" in my code
> > to change to 2004-07-01 and 2008-12-01 (plus six months in both 
cases).
> That's
> > when I got the
> > error. I almost have a feeling that R doesn't like the "empty" part of
> the
> > graph for July-December...  I
> > don't understand why this happens, but maybe it has something to do 
with
> the
> > comparison of ranges
> > you mentioned.
> 
> OK, It seems that you are right. Maybe you could add some expected x
> date/time values so that x axis will have no NA values.
> 
> x<-seq(as.Date("2004-01-01"), as.Date("2008-06-01"),by="month")
> y <- seq(405,410,length=54)
> y[50:54] <-NA
> plot(x, y, axes=FALSE, ylim=c(405,410),col="red", pch=15,
> type="o", ylab="metres above sea level", main="Main Plot Title")
> axis(2, at=405:410, tck=1, col="gray60")
> axis.Date(1, at=seq(as.Date("2004-01-01"), as.Date("2008-06-01"),
> by="month"), labels=seq(as.Date("2004-01-01"), as.Date("2008-06-01"),
> by="month"), tck=1, col="gray60")
> 
> as you see, then everything works. However I think that it is pretty 
close
> to bug in axis.Date, maybe somebody can enlighten us both :-)
> 
> Regards
> Petr
> 
> 
> >
> > Thanks for all your help!
> >
> > Kathi
> >
> > >
> > > Regards
> > > Petr
> > >
> > > >
> > > > Kathi
> > > >
> > > >
> > > > On Mon, 30 Jun 2008 11:48:43 +0200, Petr PIKAL wrote
> > > > > Hi
> > > > >
> > > > > r-help-bounces at r-project.org napsal dne 30.06.2008 11:14:48:
> > > > >
> > > > > > Dear R help list
> > > > > >
> > > > > > I have recently started using R to visualize time series of
> water
> > > level
> > > > > > measurements. The code I wrote
> > > > > > does exactly what I want:
> > > > > >
> > > > > > plot(x, a$B112, axes=FALSE, ylim=c(405,410), col="red", 
pch=15,
> > > > > > type="o", ylab="metres above sea level", main="Main Plot 
Title")
> > > > > > axis(2, at=405:410, tck=1, col="gray60")
> > > > > > axis.Date(1, at=seq(as.Date("2004-01-01"),
> as.Date("2008-06-01"),
> > > > > > by="month"), labels=seq(as.Date("2004-01-01"),
> > > as.Date("2008-06-01"),
> > > > > > by="month"), tck=1, col="gray60")
> > > > > >
> > > > > > Now I wanted to shift the data visualized by 6 months, so I
> replaced
> > >
> > > > > > "2004-01-01" by "2004-07-01"
> > > > > > and "2008-06-01" by "2008-12-01". Instead of the desired plot, 
I
> get
> > > an
> > > > > error
> > > > > > message stating
> > > > > > (forgive the perhaps faulty translation into English, I'm
> working on
> > > a
> > > > > German
> > > > > > version of R):
> > > > > >
> > > > > > mistake in axis(side, at = z, labels = labels, ...) :
> > > > > >   length of 'at' and 'labels' different, 50 != 54
> > > > >
> > > > > Those two calls have different length
> > > > >
> > > > > at=seq(as.Date("2004-01-01"), as.Date("2008-06-01"), by="month")
> > > > > labels=seq(as.Date("2004-01-01"), as.Date("2008-06-01"),
> by="month")
> > > > >
> > > > > you can try it by
> > > > >
> > > > > length(seq(...))
> > > > >
> > > > > could not there be some typo in your call?
> > > > >
> > > > > Regards
> > > > >
> > > > > Petr
> > > > >
> > > > > >
> > > > > > What have I done wrong? Thank you very much for your help!
> > > > > >
> > > > > > Katharina Dubach
> > > > > >
> > > > > > ______________________________________________
> > > > > > R-help at r-project.org mailing list
> > > > > > 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.
> > > >
> > > >
> > > > --
> > > > DropNet AG - Das Unternehmen fuer Ihren Internet-Auftritt!
> > > >
> > > >
> >
> >
> > --
> > DropNet AG - Das Unternehmen fuer Ihren Internet-Auftritt!
> >
> >
> 
> ______________________________________________
> R-help at r-project.org mailing list
> 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
> 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.



More information about the R-help mailing list