A package called, scales, is very useful for controlling the x-axis on a time-series ggplot.We will mainly use date_breaks() and date_format() functions in “scales” package to control the time-axis.
Re: the input of date_breaks(), you can use one of the following interval specifications in place of “month”: “sec”, “min”, “hour”, “day”, “week”, “month”, “year”. Also, you can use any integer in front of the specification, like date_breaks(width = “5 month”) . Note: always have a space between an integer and a specification .
With respect to the input of date_format (), see the section on Details at http://stat.ethz.ch/R-manual/R-patched/library/base/html/strptime.html. A detailed instruction of how to use these functions for a ggplot can be found at http://docs.ggplot2.org/0.9.3.1/scale_datetime.html.
# Sample Data date_today <- Sys.Date( ) date_yesterday <- today - 1 timeInSecondsSinceEpoch_today <- as.numeric(as.POSIXct(date_today, TZ="gmt", origin="1970-01-01")) timeInSecondsSinceEpoch_yesterday <- as.numeric(as.POSIXct(date_yesterday, TZ="gmt", origin="1970-01-01")) gmt <- as.POSIXct(timeInSecondsSinceEpoch_yesterday:timeInSecondsSinceEpoch_today, tz="gmt", origin="1970-01-01") data <- data.frame(gmt = gmt, value = 3) # x limits for 3 different x-axis time1_p1 <- strptime(paste(date_yesterday, "00:00:00"), "%Y-%m-%d %H:%M:%S") time2_p1 <- strptime(paste(date_yesterday, "06:00:00"), "%Y-%m-%d %H:%M:%S") xlim_p1 <- as.POSIXct(c(time1_p1, time2_p1), origin="1970-01-01", tz="GMT") time1_p2 <- strptime(paste(date_yesterday, "00:00:00"), "%Y-%m-%d %H:%M:%S") time2_p2 <- strptime(paste(date_yesterday, "12:00:00"), "%Y-%m-%d %H:%M:%S") xlim_p2 <- as.POSIXct(c(time1_p2, time2_p2), origin="1970-01-01", tz="GMT") time1_p3 <- strptime(paste(date_yesterday, "00:00:00"), "%Y-%m-%d %H:%M:%S") time2_p3 <- strptime(paste(date_today, "00:00:00"), "%Y-%m-%d %H:%M:%S") xlim_p3 <- as.POSIXct(c(time1_p3, time2_p3), origin="1970-01-01", tz="GMT") # plotting library(ggplot2) library(scales) label_x <- paste(date_yesterday, "to", date_today, "(gmt)") p <- qplot(x=gmt, y=value, data=data) + xlab(label_x) # 30-min break on the axis p1 <- p + scale_x_datetime(breaks = date_breaks("30 min"), minor_breaks=date_breaks("15 min"), labels=date_format("%H:%M:%S"), limits=xlim_p1) # 1-hour break on the axis p2 <- p + scale_x_datetime(breaks = date_breaks("1 hour"), minor_breaks=date_breaks("30 min"), labels=date_format("%H:%M:%S"), limits=xlim_p2) # 2-hour break on the axis</div> p3 <- p + scale_x_datetime(breaks = date_breaks("2 hour"), minor_breaks=date_breaks("1 hour"), labels=date_format("%H:%M:%S"), limits=xlim_p3)