2012-04-27 13 views
32

Questa domanda fa seguito a un question and its answers.linee tracciato e l'estetica del gruppo in ggplot2

Prima alcuni dati giocattolo in precedenza:

df = read.table(text = 
"School  Year Value 
A   1998 5 
B   1999 10 
C   2000 15 
A   2000 7 
B   2001 15 
C   2002 20", sep = "", header = TRUE) 

La domanda iniziale chiesto come tracciare le linee Value-anno per ogni scuola. Le risposte più o meno corrispondono a p1 e p2 sotto. Ma considera anche p3.

library(ggplot2) 

(p1 <- ggplot(data = df, aes(x = Year, y = Value, colour = School)) +  
    geom_line() + geom_point()) 

(p2 <- ggplot(data = df, aes(x = factor(Year), y = Value, colour = School)) +  
    geom_line(aes(group = School)) + geom_point()) 

(p3 <- ggplot(data = df, aes(x = factor(Year), y = Value, colour = School)) +  
    geom_line() + geom_point()) 

Entrambi p1 e p2 fanno il lavoro. La differenza tra p1 e p2 è che p1 considera Year come numerico mentre p2 considera Year come un fattore. Inoltre, p2 contiene un'estetica group in geom_line. Ma quando l'estetica group viene eliminata come in p3, le linee non vengono disegnate.

La domanda è: perché è l'estetica group necessaria quando la variabile asse x è un fattore, ma il group estetica non è necessario quando la variabile asse x è numerico?

enter image description here

risposta

40

Nelle parole di Hadley himself:

L'importante [per un grafico lineare con un fattore sull'asse orizzontale] è per specificare manualmente il raggruppamento. Per default ggplot2 utilizza la combinazione di tutte le variabili categoriali in il grafico per raggruppare le geome - che non funziona per questo grafico perché è ottenere una singola riga per ogni punto. Specificare manualmente il gruppo = 1 indica che si desidera una singola linea che collega tutti i punti.

Si può effettivamente raggruppare i punti in modi molto diversi as demonstrated by koshke here

+0

Così, quando 'x' è numerica, ipotesi circa il raggruppamento delle osservazioni per il fattore non sono fatti (e non è possibile effettuare perché ovviamente' x' non è un fattore). Suppongo che ciò che mi ha confuso nel caso di 'x' numerici è che è ancora possibile ottenere la singola riga specificando' group = 1' ma più righe senza specifica 'group'. –

+0

Sì, @Sandy Muspratt, in quest'ultimo caso, 'x' numerico fornisce un ordinamento naturale ma nessun fattore da raggruppare, quindi entrano in gioco altre variabili categoriali. Mi ci è voluto un po 'per abbracciarlo, ora è logico. (Grazie per aver accettato). – gauden

+0

Grazie per il chiarimento –

Problemi correlati