Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set x-axis labels to dates when plotting time series

Tags:

r

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?

like image 755
showkey Avatar asked Dec 16 '13 03:12

showkey


1 Answers

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
like image 125
Julián Urbano Avatar answered Sep 19 '22 15:09

Julián Urbano