Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ggplot2 + Date structure using scale X

Tags:

r

ggplot2

I really need help here because I am way beyond lost.

I am trying to create a line chart showing several teams' performance over a year. I divided the year into quarters: 1/1/2012, 4/1/12. 8/1/12. 12/1/12 and loaded the csv data frame into R.

     Month               Team Position
1   1/1/12       South Africa       56
2   1/1/12             Angola       85
3   1/1/12            Morocco       61
4   1/1/12 Cape Verde Islands       58
5   4/1/12       South Africa       71
6   4/1/12             Angola       78
7   4/1/12            Morocco       62
8   4/1/12 Cape Verde Islands       76
9   8/1/12       South Africa       67
10  8/1/12             Angola       85
11  8/1/12            Morocco       68
12  8/1/12 Cape Verde Islands       78
13 12/1/12       South Africa       87
14 12/1/12             Angola       84
15 12/1/12            Morocco       72
16 12/1/12 Cape Verde Islands       69

When I try using ggplot2 to generate the graph the fourth quarter 12/1/12 inexplicably moves to the second spot.

ggplot(groupA, aes(x=Month, y=Position, colour=Team, group=Team)) + geom_line()

I then put this plot into a variable GA in order to try to use scale_x to format the date:

GA + scale_x_date(labels = date_format("%m/%d"))

But I keep getting this Error:

Error in structure(list(call = match.call(), aesthetics = aesthetics,  : 

could not find function "date_format"

And if I run this code:

GA + scale_x_date()

I get this error:

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

I am using a Mac OS X running R 2.15.2

Please help.

like image 570
Siya Avatar asked Jan 18 '13 10:01

Siya


1 Answers

Its because, df$Month, (assuming your data.frame is df), which is a factor has its levels in this order.

> levels(df$Month)
# [1] "1/1/12"  "12/1/12" "4/1/12"  "8/1/12" 

The solution is to re-order the levels of your factor.

df$Month <- factor(df$Month, levels=df$Month[!duplicated(df$Month)])
> levels(df$Month)
# [1] "1/1/12"  "4/1/12"  "8/1/12"  "12/1/12"

ggplot2_factor_levels

Edit: Alternate solution using strptime

# You could convert Month first:
 df$Month <- strptime(df$Month, '%m/%d/%y')

Then your code should work. Check the plot below:

ggplot2_strptime_solution

like image 157
Arun Avatar answered Sep 21 '22 09:09

Arun