20
votes

does anyone know how to rotate axis ticks in the date format with ggplot2? I want to get labels with "Date-Month" (ex. "1985-5") with a 45° angle on the x axis.

data sample:

Station Date Ptot
A 1980-02 16
A 1980-03 19
A 1980-04 40
A 1980-05 48
A 1980-06 NA
A 1980-07 18.5
A 1980-08 24.6
B 1980-07 50.8
B 1980-08 28.9
B 1980-09 32.9
B 1980-10 47.9
B 1980-11 16.3

I tried this:

library(ggplot2)
library(scales)

plot <- ggplot(data=na.omit(data), aes(x=Date, y=Ptot, group=Station))+
   geom_line()+
   facet_grid(Station~.)+
   scale_x_date(breaks = "year", labels=date_format("%Y-%m"))+
   xlab("Year")+
   ylab("Prec (mm)")+
   labs(colour = "Station")+
   theme(axis.text.x = element_text(angle = 45, hjust = 1))+
   theme_bw()

plot

but it doesn't work.

Thanks!

1
you'll have to provide a better reproducible example than that with data, and your complete code.Arun
OK, I just improved details in the question...user2165907
Check @Didzis' edit where he explains the problem with your Date column.Arun

1 Answers

48
votes

First, you should make column Date as date. As it do not have the day provided, you should add for example 01 to each date and convert them.

data$Date<-as.Date(paste(data$Date,"-01",sep=""),format="%Y-%m-%d")

To get correct placement of labels under x axis you should set not just angle= but also hjust=1 to ensure that end of the label is placed under the tick mark. Also theme_bw() should be placed before theme specification of axis texts.

ggplot(data=na.omit(data), aes(x=Date, y=Ptot, group=Station))+
  geom_line()+
  facet_grid(Station~.)+
  scale_x_date(breaks = "month", labels=date_format("%Y-%m"))+
  xlab("Year")+
  ylab("Prec (mm)")+theme_bw()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

enter image description here