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 What have I done wrong? Thank you very much for your help! Katharina Dubach
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 anerror> message stating > (forgive the perhaps faulty translation into English, I'm working on aGerman> version of R): > > mistake in axis(side, at = z, labels = labels, ...) : > length of 'at' and 'labels' different, 50 != 54Those 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 guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
"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 seemsto> 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 ortheir> 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. 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 waterlevel> > > 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 getan> > error > > > message stating > > > (forgive the perhaps faulty translation into English, I'm working ona> > 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! > >
Petr PIKAL
2008-Jul-02 08:03 UTC
[R] bug in axis.Date? was (Re: newbie needs help plotting time series)
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 thisseems> > to > > > have something to do > > > with the number of records the table I'm reading (here: columnB112).> > 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 intervalsor> > 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 thewater 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 and408> 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. Ifsomething> were wrong there, > then I guess I would not be able to plot my data at all. But using thelimits> of 2004-01-01 and > 2008-06-01, I can plot all the timelines for my 170 measuring stationswithout> any problem. But > since it's now July, I wanted to shift the view by half a year. So Iused> "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 ofthe> graph for July-December... I > don't understand why this happens, but maybe it has something to do withthe> 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 ofwater> > 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 Ireplaced> > > > > > > "2004-01-01" by "2004-07-01" > > > > > and "2008-06-01" by "2008-12-01". Instead of the desired plot, Iget> > an > > > > error > > > > > message stating > > > > > (forgive the perhaps faulty translation into English, I'mworking 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, reproduciblecode.> > > > > > > > > -- > > > DropNet AG - Das Unternehmen fuer Ihren Internet-Auftritt! > > > > > > > > > -- > DropNet AG - Das Unternehmen fuer Ihren Internet-Auftritt! > >