2012-04-27 12 views
32

Esta pregunta se deriva de un question and its answers.líneas de trazado y la estética del grupo en ggplot2

En primer lugar algunos datos de juguete anterior:

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 pregunta original preguntó cómo trazar líneas Valor años para cada escuela. Las respuestas más o menos corresponden a p1 y p2 a continuación. Pero también considere 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()) 

Ambos p1 y p2 hacen el trabajo. La diferencia entre p1 y p2 es que p1 trata a Year como numérico, mientras que p2 trata a Year como un factor. Además, p2 contiene una estética group en geom_line. Pero cuando la estética group se reduce como en p3, las líneas no se dibujan.

La pregunta es: ¿Por qué es necesaria la estética group cuando la variable del eje x es un factor, pero la estética group no es necesaria cuando la variable del eje x es numérica?

enter image description here

Respuesta

40

En palabras de Hadley himself:

Lo importante [para un gráfico de líneas con un factor en el eje horizontal] es para especificar manualmente la agrupación. Por por defecto ggplot2 usa la combinación de todas las variables categóricas en el gráfico para geoms de grupo - eso no funciona para este diagrama porque obtiene una línea individual para cada punto. Especifique manualmente group = 1 indica que desea una sola línea que conecte todos los puntos.

En realidad se puede agrupar los puntos de maneras muy diferentes as demonstrated by koshke here

+0

Así que cuando 'x' es numérico, no se hacen suposiciones acerca de la agrupación de las observaciones por el factor (y no se puede hacer porque, obviamente,' x' no es un factor). Supongo que lo que me confundía en el caso de 'x' numérico es que aún es posible obtener la línea simple especificando' group = 1' pero múltiples líneas sin especificación 'group'. –

+0

Sí, @Sandy Muspratt, en su último caso, 'x' numérico proporciona un orden natural pero no un factor para agrupar, por lo tanto entran en juego otras variables categóricas. Me tomó un tiempo entenderlo, ahora es lógico. (Gracias por aceptar). – gauden

+0

Gracias por la aclaración –

Cuestiones relacionadas