2013-05-03 14 views
27

Supponiamo che io sono un dataframe:Usando `geom_line()` con l'asse X essere fattori

hist <- data.frame(date=Sys.Date() + 0:13, 
        counts=1:14) 

voglio tracciare il conteggio totale contro giorno della settimana, utilizzando una lineaper collegare i punti. Di seguito mette punti su ogni valore:

hist <- transform(hist, weekday=factor(weekdays(date), 
             levels=c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'))) 
ggplot(hist, aes(x=weekday, y=counts)) + geom_point(stat='summary', fun.y=sum) 

Quando provo a collegarli con una linea (geom_line()), ggplot lamenta di avere solo un'osservazione di dati per gruppo e quindi non è in grado di tracciare una linea tra i punti.

Capisco questo: sta cercando di disegnare una riga per ogni giorno della settimana (livello del fattore).

Come posso ottenere ggplot solo per far finta (solo per gli scopi della linea) che i giorni della settimana sono numerici? Forse devo avere un'altra colonna day_of_week che è 0 per lunedì, 1 per martedì, ecc.?

risposta

33

Se ho ben capito il problema in modo corretto, specificando group=1 e l'aggiunta di uno strato stat_summary() dovrebbe fare il trucco:

ggplot(hist, aes(x=weekday, y=counts, group=1)) + 
geom_point(stat='summary', fun.y=sum) + 
stat_summary(fun.y=sum, geom="line") 

enter image description here

+3

Fantastico! Qual è lo scopo di 'group = 1' (perché 1? Che cosa fa?) –

+3

Oh, penso di averlo trovato. [qui (documentazione ggplot2)] (http://docs.ggplot2.org/current/aes_group_order.html) –

+5

Nel caso in cui si desideri stampare più righe contemporaneamente, è necessario specificare 'group = variableWhichDefinesLines ' –

Problemi correlati