2015-07-30 11 views

Odpowiedz

17

Czy Twój year kolumna numeryczna? Możesz dodać scale_x_continuous z argumentem breaks, aby określić, gdzie powinny znajdować się tyki osi X. Nie mogę powiedzieć, co zakres lat znajduje się na obrazku, ale czy to od 1900 do 2000 (EG) można zrobić coś takiego:

ggplot(prova, aes(x=year, y=mass..g.)) + 
    geom_line(aes(group=1)) + 
    scale_x_continuous(breaks=seq(1900, 2000, 10)) 
10

Fałszywe dane:

df = data.frame(year = as.factor(1800:2000), 
       variable = rnorm(length(1800:2000))) 

Twój Działka z fałszywymi danymi:

ggplot(df, aes(x = year, y = variable, group = 1)) + 
    geom_line() 

problemem jest to, że zmienna roku jest factor (albo łańcuch?), więc jest to interpretowane jako kategoryczne. Można pracować w tym kontekście:

ggplot(df, aes(x = year, y = variable, group = 1)) + 
    geom_line() + 
    scale_x_discrete(breaks = levels(df$year)[c(T, rep(F, 9))]) 

Albo, jeszcze lepiej, można przekonwertować go na numeryczne i wszystko działa automatycznie:

df$real_year = as.numeric(as.character(df$year)) 
ggplot(df, aes(x = real_year, y = variable)) + 
    geom_line() 

Uwaga, to robi to „właściwy sposób”, to nie musisz się martwić group = 1 lub bałagan ze skalą. ggplot nagradza twoje dane we właściwym formacie: napraw swoje dane i nie będziesz musiał naprawiać fabuły. Jeśli chcesz mieć pewność, że etykiety są dokładnie co 10 lat, możesz użyć scale_x_continuous zgodnie z sugestią użytkownika 2034412, ale domyślnie będzie dobrze odgadnąć "ładne" przerwy w osi.

Jeśli oś x jest faktyczna data lub datetime, coś 1984-10-31 następnie należy przekonwertować go na Date obiektu (a może POSIX obiektu, jeśli ma czas, jak również), i znowu ggplot będzie wtedy wiedzieć, jak odpowiednio go obsłużyć. Zobacz ?strftime (funkcja podstawowa) lub pakiet lubridate dla konwersji na odpowiednie klasy dat.

4

innych odpowiedzi objęły przypadek gdzie terminy są lata numeryczne, ale jeśli (jak zauważa @Gregor) Twoje terminy są rzeczywiste Date obiekty, jest to dużo łatwiejsze:

scale_x_date(name = 'My date axis title', date_breaks = '20 years', 
     date_labels = '%Y') 

Z scale_date, można kontroluj przerwy za pomocą intuicyjnego języka i etykietowania z (miejmy nadzieję) znajomym strptime notation.

0

Jeśli nie masz zbyt wiele DATAPOINT można zrobić tak:

Fałszywe dane:

df = data.frame(year = as.factor(1990:2000),variable = 
rnorm(length(1990:2000))) 

Normal działki:

ggplot(df, aes(x = year, y = variable, group = 1)) + geom_line() 

Działka z ukrytymi etykiet:

ggplot(df, aes(x = year, y = variable, group = 1)) + 
    geom_line() + theme(axis.text.x=element_text(color=c("black","transparent","transparent","transparent","black","transparent","transparent","transparent","transparent","transparent","black"))) 
Powiązane problemy