[R] plotting dates, incorrectly scaled x-axis?

Ted Harding Ted.Harding at wlandres.net
Sun Feb 12 17:18:12 CET 2012


On 12-Feb-2012 Ted Harding wrote:
> On 12-Feb-2012 Christof Kluß wrote:
>> Hi,
>> 
>> I want to plot with axis.Date(), but something is scaled incorrectly.
>> The red vertical line in is put on a totally wrong position.
>> (sample below)
>> 
>> Do you have an idea what I'm doing wrong?
>> 
>> Thx
>> Christof
>> 
>> 
>> x11(width=30, height=20)
>> 
>> x<-seq(as.Date("2010-02-27"), as.Date("2011-03-28"),"month")
>> y <- seq(0,100,length=length(x))
>> 
>> plot(y ~ x, type="o", tck=1, xaxt="n")
>> 
>> axis.Date(1, at=x, labels=format(x,"%b\n%Y"), padj=0.5)
>> 
>> abline(v=as.Date("2011-01-01"), col="red", lty="dashed")
> 
> I don't think it is in the wrong position! What is happening
> is that your month labels on the X-axis are not at the dates
> one would intuitively expect.
> 
>   x
>   #  [1] "2010-02-27" "2010-03-27" "2010-04-27" "2010-05-27"
>   #  [5] "2010-06-27" "2010-07-27" "2010-08-27" "2010-09-27"
>   #  [9] "2010-10-27" "2010-11-27" "2010-12-27" "2011-01-27"
>   # [13] "2011-02-27" "2011-03-27"
> 
> so the labels "Feb 2010", "Mar 2010",  etc., are placed on
> tick-marks which occur on the 27th day of each month.
> 
> Your abline() is dated "2011-01-01", which is five days
> after "2010-12-27" = x[11], fourth from the end.
> 
> If you look at the plot, you will see that the read line
> is a little bit to the right of the fourth tick from the
> end "Dec 2010", which is just where it should be, given
> that you have placed the month names at the 27th of each month.
> 
> One solution would be to use
> 
>   x<-seq(as.Date("2010-02-01"), as.Date("2011-03-01"),"month")
> 
> which would place these on the first of each month. But you
> may have other reasons for wanting to choose the 27th, in which
> case life may get a little more complicated!
> 
> Hopiung this helps,
> Ted.

Having now had another look at this, it would seem that, instead
of your original code:

# x11(width=30, height=20)
# x<-seq(as.Date("2010-02-27"), as.Date("2011-03-28"),"month")
# y <- seq(0,100,length=length(x))
# plot(y ~ x, type="o", tck=1, xaxt="n")
# axis.Date(1, at=x, labels=format(x,"%b\n%Y"), padj=0.5)
# abline(v=as.Date("2011-01-01"), col="red", lty="dashed")

the following gives what you apparently expect:

x11(width=30, height=20)
x<-seq(as.Date("2010-02-27"), as.Date("2011-03-28"),"month")
y <- seq(0,100,length=length(x))
months<-seq(as.Date("2010-02-01"), as.Date("2011-03-02"),"month")
plot(y ~ x, type="o", tck=1, xaxt="n")
axis.Date(1, at=months, labels=format(months,"%b\n%Y"), padj=0.5)
abline(v=as.Date("2011-01-01"), col="red", lty="dashed")

Ted.


-------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at wlandres.net>
Date: 12-Feb-2012  Time: 16:18:08
This message was sent by XFMail



More information about the R-help mailing list