2

I am trying to plot values over time and am getting the error:

Error: Invalid input: date_trans works with objects of class Date only

I worked through earlier problems with this post as well as the post here. I want to set the min and max of the x- axis to remove the blanks space on the extreme ends of plot where there is no data.

This code calls a plot, but without the corrected x- axis.

ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID))+
        geom_line(size = 1)+ 
        theme(axis.text.x=element_text(angle=30, hjust=1))

I tried to set the limits of the x-axis using scale_x_date with the code below - which produces the error.

ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID))+
        geom_line(size = 1)+ 
        theme(axis.text.x=element_text(angle=30, hjust=1))+
        scale_x_date(breaks = "1 week", labels=date_format("%b-%d-%Y"), 
            limits = as.Date(c("2014-01-6","2014-02-15")))

A dput() of my data are below. I am using the newest version of R and am running Windows 7.

Thanks in advance.

dta <- structure(list(IndID = c("BHS_011_A", "BHS_011_A", "BHS_011_A", 
"BHS_011_A", "BHS_011_A", "BHS_011_A", "BHS_011_A", "BHS_011_A", 
"BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_015_A", 
"BHS_015_A", "BHS_015_A", "BHS_015_A", "BHS_018_A", "BHS_018_A", 
"BHS_018_A", "BHS_018_A", "BHS_018_A", "BHS_018_A", "BHS_018_A", 
"BHS_018_A"), WeekStarting = structure(c(1388905200, 1389510000, 
1390114800, 1390719600, 1391324400, 1391929200, 1392534000, 1393138800, 
1388905200, 1389510000, 1390114800, 1390719600, 1391324400, 1391929200, 
1392534000, 1393138800, 1388905200, 1389510000, 1390114800, 1390719600, 
1391324400, 1391929200, 1392534000, 1393138800), class = c("POSIXct", 
"POSIXt"), tzone = ""), AvgWeekEle = c(1717.21428571429, 1770.07142857143, 
1737.53571428571, 1673.32142857143, 1648.42857142857, 1760.71428571429, 
1668.48148148148, 1654.5, 1643.5, 1794.85714285714, 1740.64285714286, 
1664.73076923077, 1704.73076923077, 1685.2962962963, 1707.89285714286, 
1661.46428571429, 1702.87096774194, 1691.17647058824, 1653.41176470588, 
1650.30303030303, 1741.54545454545, 1652.33333333333, 1573.125, 
1570.82352941176)), .Names = c("IndID", "WeekStarting", "AvgWeekEle"
), class = "data.frame", row.names = c(3362L, 3363L, 3364L, 3365L, 
3366L, 3367L, 3368L, 3369L, 3470L, 3471L, 3472L, 3473L, 3474L, 
3475L, 3476L, 3477L, 3535L, 3536L, 3537L, 3538L, 3539L, 3540L, 
3541L, 3542L))
Henrik
  • 65,555
  • 14
  • 143
  • 159
B. Davis
  • 3,391
  • 5
  • 42
  • 78
  • Yes, I saw that suggestion in the linked posts. But following your suggestion I get the error 'Invalid input: time_trans works with objects of class POSIXct only' As both suggestions resulted in an error, I figured I would start at the beginning. Any thoughts on the 2nd error following your suggestion? – B. Davis Feb 05 '15 at 22:14
  • 2
    Changing to `scale_x_datetime` works for me. Note you also need to change the `limits=` from `as.Date` to `limits = as.POSIXct` – user20650 Feb 05 '15 at 22:25
  • Embarrassing and humbling... thanks! Would gladly accept an answer... – B. Davis Feb 05 '15 at 22:27

1 Answers1

6

Because your x variable is of class as.POSIXct you should use scale_x_datetime instead. scale_x_date is for variables of class Date (as the error message may suggest).

"To remove the blanks space on the extreme ends of plot", you may use the expand argument in your scale call (see here). Setting expand to zero, removes the default, small gap between data and axes.

You may also have a look at this post to use the limits argument in the scale call (or xlim), or use coord_cartesian to 'zoom'.

ggplot(dta, aes(x= WeekStarting, y = AvgWeekEle, group = IndID)) +
  geom_line(size = 1) + 
  theme(axis.text.x=element_text(angle = 30, hjust = 1)) +
  scale_x_datetime(breaks = "1 week", labels = date_format("%b-%d-%Y"),
                   expand = c(0, 0))

enter image description here

Community
  • 1
  • 1
Henrik
  • 65,555
  • 14
  • 143
  • 159