2015-07-30 17 views
13

sto cercando di utilizzare ggplot2 per tracciare questo: enter image description here ma come potete vedere sul nulla x asse non si può leggere ...Come non mostrare tutte le etichette sull'asse ggplot?

Così come posso mostrare sull'asse x il valore ogni 10 anni , per esempio?

Questo vi comando:

ggplot(prova, aes(x=year, y=mass..g.)) + geom_line(aes(group = 1))

risposta

17

È il vostro year colonna numerica? È possibile aggiungere scale_x_continuous con un argomento breaks per specificare dove dovrebbero essere le zecche dell'asse x. Non posso dire quello che l'intervallo di anni è l'immagine, ma se è 1900-2000 (per esempio) si può fare qualcosa di simile:

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

dati falsi:

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

tuo plot con i dati falsi:

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

Il problema è che la variabile anno è un factor (o forse una stringa?), quindi è interpretato come categorica. È possibile lavorare in questo quadro:

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

O, meglio ancora, è possibile convertirlo in numerico e le cose funzionare automaticamente:

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

Si noti che questo, a farlo "nel modo giusto", è non devi preoccuparti di group = 1 o fare casino con la bilancia. ggplot ti premia di avere i tuoi dati in un formato corretto: correggi i tuoi dati e non dovrai correggere la tua trama. Se si desidera assicurarsi che le etichette siano esattamente ogni 10 anni, è possibile utilizzare scale_x_continuous come suggerito dall'utente2034412, ma per impostazione predefinita sarà una buona ipotesi di interruzioni "carine" nell'asse.

Se il vostro asse x è una data reale o datetime, qualcosa di simile 1984-10-31 allora si dovrebbe convertirlo in un oggetto Date (o forse un oggetto POSIX se ha tempo pure), e di nuovo ggplot sarà quindi sapere come gestirlo in modo appropriato. Vedere ?strftime (funzione di base) o il pacchetto lubridate per le conversioni in classi di data appropriate.

4

Le altre risposte hanno coperto il caso in cui le date sono anni numerici, ma se sono (come note @Gregor) le date effettive Date oggetti, è molto più facile:

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

Con scale_date, è possibile controllare le interruzioni con linguaggio intuitivo e l'etichettatura con (si spera) familiare strptime notation.

0

Se non si dispone di troppi datapoint si può fare in questo modo:

dati falsi:

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

trama normale:

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

Plot con le etichette nascoste:

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"))) 
Problemi correlati