[R] Conditional formatting of POSIXct date axis labels to only print year at a change

Duncan Murdoch murdoch.duncan at gmail.com
Wed Feb 12 02:43:27 CET 2014

On 14-02-11 6:13 PM, Peter Lomas wrote:
> Hello,
> I'm creating graphs like the following:
> x <- seq(as.POSIXct("2012-01-01"), as.POSIXct("2013-01-01"), by = "days")
> y <- (1:length(x)*10 + cumsum(rnorm(n=length(x), mean=0, sd= 100)))
> plot(x,y, type = 'l', xaxt='n')
> axis.POSIXct(side=1,at=seq(min(x),  max(x), by="months"),  format = "%b
> \'%y", labels = TRUE)
> For aesthetic reasons, I would only like to print the year label (%y) on
> the x axis at the change points of the year.  In this example, there would
> be a "Jan '12" and "Jan '13" with the months in between omitting the year
> label.
> Any clues would be appreciated!

Instead of labels=TRUE, compute the strings for the labels you want, and 
use those.  For example,

  ticks <- seq(min(x),  max(x), by="months")
  full <- format(ticks, format="%b \'%y")
  short <- format(ticks, format="%b")
  labels <- ifelse (short == "Jan", full, short)
  axis.POSIXct(side=1,at=ticks, labels = labels)

Duncan Murdoch

More information about the R-help mailing list