2013-01-18 1 views
5

Naprawdę potrzebuję pomocy, ponieważ jestem daleko poza zagubioną.ggplot2 + Struktura daty za pomocą skali X

Próbuję utworzyć wykres liniowy pokazujący wydajność kilku zespołów w ciągu roku. Rok dzieliłem na kwartały: 1/1/2012, 4/1/12. 8/1/12. 01.12.12 i wprowadzono ramkę danych csv w 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 

Podczas próby stosując ggplot2 wygenerować wykres czwarta ćwiartka 01.12.12 niewytłumaczalny sposób przenosi się do drugiego miejsca.

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

I następnie umieścić tę działkę pod zmiennym GA, aby spróbować użyć SCALE_X formatować datę:

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

ale wciąż otrzymuję ten błąd:

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

mogli nie znajduje funkcji "date_format"

A jeśli uruchomię ten kod:

GA + scale_x_date() 

otrzymuję ten błąd:

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

Używam Mac OS X działa R 2.15.2

Proszę o pomoc.

+0

Przepraszamy. Jak mogę to zrobić? – Siya

+0

@Syia i jako uprzejma akcja, którą możesz przegłosować, szczególnie gdy przyjmiesz rozwiązanie ... To zachęci ludzi do pomocy następnym razem ... – agstudy

Odpowiedz

6

To dlatego, że df$Month, (zakładając, że twój data.frame jest df), który jest factor ma swoje poziomy w tej kolejności.

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

Rozwiązaniem jest zmiana kolejności poziomów czynnika.

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: Alternatywne rozwiązanie wykorzystujące strptime

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

Potem kod powinien działać. Sprawdź poniższy dział:

ggplot2_strptime_solution

+0

Dziękuję bardzo. – Siya

+0

@Arun Jak udało ci się przeczytać jego dane .. kiedy próbowałem, miałem problem ... używając read.table (text = '..') – agstudy