4.ggplot2 - Agrupación de objetos geométricos
Los objetos geométricos se pueden dividir simplemente en objetos geométricos individuales y objetos geométricos de colección. Objeto de geometría única Dibuja un objeto gráfico para cada fila del marco de datos que se puede distinguir de otros individuos. Por ejemplo, cada punto en un diagrama de dispersión representa un punto de observación. Los objetos de geometría grupal se utilizan para representar múltiples observaciones. Esto puede ser el resultado de un resumen estadístico, como un diagrama de líneas de caja, o puede ser la base de una visualización geométrica, como un diagrama poligonal. Los gráficos de líneas y los gráficos de rutas tienen ambas características: cada línea se compone de una serie de segmentos de línea, pero cada segmento de línea representa dos puntos. ¿Cómo asignar y controlar los elementos gráficos observados? Ese es el trabajo de las propiedades del diagrama de grupo.
De forma predeterminada, las propiedades del gráfico de grupo se asignan a todas las variables discretas del gráfico. Esto generalmente divide los datos correctamente, pero si no es así, o si no se usan variables discretas en el gráfico, deberá definir la estructura de agrupación, haciendo que la estructura de agrupación sea explícita al asignar las agrupaciones a variables con valores diferentes. para cada agrupación.
De forma predeterminada, existen tres soluciones de agrupación comunes, que analizaremos a continuación. En el siguiente ejemplo utilizaremos el conjunto de datos longitudinal simple Oxboys del paquete nlme. Este conjunto de datos registra la altura y la edad media de 26 niños ("sujetos") en nueve períodos de tiempo diferentes ("eventos"). Los temas y ocasiones se almacenan como factores ordenados.
En muchos casos queremos agrupar datos y procesar cada agrupación de la misma forma. En otras palabras, desea poder distinguir individuos individuales, pero no identificarlos. Esto es común en muchos estudios longitudinales de individuos, y las tramas a menudo se describen como tramas de espagueti. Por ejemplo, el siguiente gráfico muestra la trayectoria de crecimiento de cada niño (por sujeto):
Si especifica la variable de agrupación incorrecta, obtendrá un gráfico irregular inútil:
Si el la agrupación no está definida por una sola variable sino por una combinación de variables, use interacción() para combinarlas, por ejemplo aes( grupo = interacción(escuela_id, estudiante_id)) .
A veces combinamos datos en diferentes niveles y luego los graficamos usando información de resumen estadístico: un nivel puede mostrar un único atributo, mientras que otro nivel puede mostrar información de resumen general. Basándonos en el ejemplo anterior, digamos que queremos agregar una línea suave para mostrar la tendencia general para todos los niños. Si usáramos la misma agrupación en ambas capas, agregaríamos una agrupación suave para cada niño:
Esto no es lo que queremos; sin darnos cuenta agregaríamos una agrupación suavizada para cada niño Línea suave. Los grupos controlan la visualización de la geometría y el procesamiento de datos estadísticos: se ejecuta una transformación estadística por grupo.
En lugar de configurar la propiedad del gráfico agrupado en ggplot() que se aplica a todas las capas, la configuramos en geom_line() para que solo se aplique a las líneas. No hay variables discretas en el gráfico, por lo que la variable de agrupación predeterminada será una constante y obtendremos un efecto de suavizado:
Algunos gráficos tienen variables discretas en el eje x, pero aún quieres dibujar líneas que conectan los grupos. Esta es una estrategia utilizada en gráficos de interacción, gráficos de contorno, gráficos de coordenadas paralelas, etc. Por ejemplo, supongamos que trazamos un diagrama de caja de altura para cada ocasión de medición:
El gráfico tiene la variable discreta Ocasión, por lo que trazamos un diagrama de caja para cada valor de x único. Ahora queremos superponer las líneas que conectan a cada niño. Simplemente agregar geom_line() no funciona: las líneas se dibujan en cada escena, en lugar de atravesar cada objeto:
Para obtener el gráfico que queremos, necesitamos superponer las agrupaciones y dibujar una línea para cada chico:
La última cuestión importante al agrupar objetos geométricos es cómo asignar las propiedades gráficas de las observaciones individuales a las propiedades gráficas generales. ¿Qué sucede cuando diferentes propiedades gráficas se asignan a un solo elemento geométrico?
En ggplot2, diferentes grupos de objetos geométricos se manejan de manera diferente.
Los gráficos de líneas y rutas funcionan según el principio del "primer valor": cada segmento de línea está definido por dos observaciones, y ggplot2 dibuja el segmento de línea utilizando las propiedades gráficas (como el color) asociadas con la primera observación. Es decir, el primer segmento de línea se dibuja usando las propiedades gráficas de la primera observación, el segundo segmento de línea se dibuja usando las propiedades gráficas de la segunda observación, y así sucesivamente. No se utilizará el valor del atributo gráfico del último punto de observación:
En el primer gráfico, el color es discreto, el primer punto y el primer segmento de recta son rojos, el segundo punto y el primer segmento de recta son rojos, y el segundo punto y el primer segmento de línea son rojos. Los dos segmentos de línea están en verde y el último punto (que no tiene un segmento de línea correspondiente) está en azul. En la segunda imagen, los colores son continuos y el mismo principio se aplica a los tres tonos diferentes de azul. Tenga en cuenta que incluso si la variable de color es continua, ggplot2 no combina suavemente de un valor de propiedad gráfica a otro. Si desea lograr este resultado, puede realizar la interpolación lineal usted mismo:
Vale la pena señalar una limitación adicional para los gráficos de líneas y rutas: el tipo de línea debe seguir siendo el mismo para cada segmento de línea. En R, no es posible dibujar líneas con diferentes tipos de líneas.
¿Qué pasa con otros conjuntos de objetos geométricos, como los polígonos? La mayoría de los objetos geométricos de grupo son más complejos que los diagramas de líneas y trayectorias, y un objeto geométrico puede corresponder a muchas observaciones. Por ejemplo, ¿cómo colorearías un polígono si cada punto de su límite tuviera un color de relleno diferente? Debido a esta ambigüedad, ggplot2 adopta una regla simple: solo use componentes individuales si sus propiedades gráficas son las mismas. Si las propiedades del gráfico son diferentes para cada componente, ggplot2 usará los valores predeterminados.
Estos problemas son más relevantes cuando se asignan propiedades gráficas a variables continuas. Para variables discretas, el comportamiento predeterminado de ggplot2 es tratar la variable como parte de la estética del grupo, como se describió anteriormente. El efecto de esto es dividir la geometría del grupo en partes más pequeñas. Esto funciona especialmente bien para gráficos de barras y de áreas, ya que al apilar las secciones se produce la misma forma que los datos originales desagrupados:
Si intenta asignar el atributo de relleno a una variable continua de la misma manera (como como en la carretera), no tendrá éxito. La agrupación predeterminada se basa únicamente en categorías, por lo que cada barra ahora está asociada con varios colores (dependiendo de los valores observados en cada categoría de carretera). Dado que los gráficos de barras solo pueden mostrar un color, ggplot2 vuelve al gris predeterminado en este caso.
En la imagen de la derecha, la "barra sombreada" para cada categoría está apilada a partir de varias barras diferentes, cada una completada según el valor de hwy.value de diferentes colores. Tenga en cuenta que al apilar, las barras se apilan en el orden definido por la variable de agrupación (hwy en este caso). Si necesita un control preciso sobre este comportamiento, deberá crear un factor con niveles de clasificación según sea necesario.