Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R + ggplot: plotting irregular time series

I have data at a number of days since an event. This data is sampled irregularly - my time points are like 0, 5, 6, 10, 104 days. I don't have specific date-time information - i.e. I have no idea when in real life the event I'm studying occurred.

I'd like to plot, using ggplot, my time series. I can use, say

p <- ggplot(data,aes(x=time,y=expression))
p <- p + geom_point()

but of course my x-axis variables are plotted next to each other, so that the distance between t=10 and t=104 is the same as t=5 and t=6. So I can make something up like

start <- ISOdate(2001, 1, 1, tz = "")
data$time <- start + data$time*60*60*12

which almost works, but now the ticks on my x-axis are horribly inaccurate date times. I could re-format them maybe? But can't see anyway to make the format "days from start". And by now I've been googling around for quite a while, with the nagging feeling that I'm missing something seriously obvious. Am I?

like image 848
Mike Dewar Avatar asked Jul 23 '10 19:07

Mike Dewar


2 Answers

Not sure if this is what you're looking for (see this related question). You can reformat the axis and deal with irregularity by using the scale_x functions. For instance:

p <- qplot(1:3, 1:3, geom='line') 
p + scale_x_continuous("", breaks=1:3, 
        labels = as.Date(c("2010-06-03", "2010-06-04", "2010-06-07")))

Incidentally, here's a function that I created for plotting multivariate zoo objects:

qplot.zoo <- function(x) {
  if(!inherits(x, "zoo")) stop("x must be a zoo object")
  x.df <- data.frame(dates=index(x), coredata(x))
  x.df <- melt(x.df, id="dates", variable="value")
  ggplot(x.df, aes(x=dates, y=value, group=value, colour=value)) + geom_line() + opts(legend.position = "none")
}
like image 181
Shane Avatar answered Oct 18 '22 03:10

Shane


Sounds like your time variable is a factor or maybe a character vector, not a numeric value! If you do data$time <- as.numeric(data$time) it may well solve your problem.

ggplot is pretty good at using the right sort of scale for the right sort of data. (Sadly, data import routines in R generally are less smart...)

like image 41
Harlan Avatar answered Oct 18 '22 02:10

Harlan