8
x=read.table(text="    Qtr1 Qtr2 Qtr3 Qtr4  
2010  1.8  8.0  6.0  3.0  
2011  2.0 11.0  7.0  3.5  
2012  2.5 14.0  8.0  4.2  
2013  3.0 15.2  9.5  5.0",
    sep="",header=TRUE)  
y<-ts(as.vector(as.matrix(x)),frequency=4,start=c(2010,1))  
plot.ts(y)  
time<-seq(as.Date("2010/1/1"),length.out=20,by="3 months")  
axis(1, at = time) 

when i draw the graph ,i want to add date in x axis,why my axis(1, at = time) can't add the date data in x axis?

Julián Urbano
  • 8,378
  • 1
  • 30
  • 52
showkey
  • 482
  • 42
  • 140
  • 295

1 Answers1

9

When you call axis(1, at=time) you're telling R to plot the x axis with labels at points given by time. However, time is a vector of characters, not numbers.

In general, you call axis(1, at=..., labels=...) indicating the actual labels and where to place them along the axis. In your case, your call to plot.ts implicitly sets the x-axis limits to 2010 and 2013.75, so your at parameter should reflect those limits.

So you want to call axis saying that the labels are time and the positions are 2010, 2010.25, 2010.50 ..., that is, seq(from=2010, to=2013.25, by=0.25). A general solution is this one:

plot.ts(y,axes=F) # don't plot the axes yet
axis(2) # plot the y axis
axis(1, labels=time, at=seq(from=2010, by=0.25, length.out=length(time)) )
box() # and the box around the plot
Julián Urbano
  • 8,378
  • 1
  • 30
  • 52