5
votes

i am displaying time series data with ggplot2 but the tick-labels show some strange behaviour. probably i am doing something wrong but i could not find any help on the internet. here's an example:

#just sample data
time <- as.Date(seq(as.Date("2004/1/1"), as.Date("2009/12/1"), by = "1 month"))
data <- rnorm(nrow(test))+c(1:nrow(test))
test <- data.frame(time, data)

i plot with:

q1 <- ggplot(data=test) + geom_line(aes(x=time, y=data))
q1 <- q1 + scale_x_date(major="years", minor="3 months", format="%Y-%m", lim=c(as.Date("2004/1/1"),as.Date("2009/12/1")), name="") 
q1

this produces the following graph: example graph

but from my understanding the grid should end 2009/12/1 - right? thanks a lot for your help!

2
What's the problem? The line does end Dec 2009hadley
hadley yes your totally right - i meant the grid and bdemarest was completely right with his answer - i just didn't realise. sorrySeb

2 Answers

8
votes

The limits parameter to scale_x_date affects which data points are plotted, but does not directly change the axis tick labels nor the axis range. This behavior is well illustrated in the help page http://had.co.nz/ggplot2/scale_date.html (towards the bottom of the page.)

If you want to eliminate the empty areas to left and right of your data, use coord_cartesian

library(ggplot2)

x <- as.Date(seq(as.Date("2004/1/1"), as.Date("2009/12/1"), by = "1 month"))
y <- rnorm(length(x))+c(1:length(x))
test <- data.frame(time=x, data=y)

q2 <- ggplot(data=test) + 
      geom_line(aes(x=time, y=data)) +
      scale_x_date(major="years", minor="3 months", format="%Y-%m", name="") +
      coord_cartesian(xlim=c(as.Date("2004/1/1"),as.Date("2009/12/1")))

png("date_ticks_plot.png", height=600, width=600)
print(q2)
dev.off()

enter image description here

2
votes

Your line does end at 2009/12/1, but perhaps you are using an older version of ggplot, and upgrading may help with x-axis labels.