library(tidyverse)
El objetivo de este trabajo es mostrar las funcionales y estructuras principales de ggplot2.
GGplot 2 empieza siempre la función con ggplot(). GGplot() crea un sistema de coordenadas al que puedes agregar capas.
El primer argumento de ggplot() es el dataset. En este caso es data = mpg.
A partir de ahi trabajamos con las diferentes capas de la funcion:
Por un lado tenemos la funcion geom_point(). Esta funcion nos permite dar forma al tipo de grafico que queremos visualizar. Toda funcion de “geom”, incluye un argumento llamado mapping que siempre se empareja o iguala con el argumento aes que la utilizamos para especificar las variables de coordenadas “X” e “Y”.
ggplot(data = <DATA>) + <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
Veamos un ejemplo:
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
En este caso, podemos añadir una tercera variable de nuestro dataset como class añadiendolo dentro de nuestro argumento como un componente denominado “aesthetic” o estético.
Un “aesthetic” es básicamente una propiedad visual de los objetos en el grafico. Aqui dentro podemos incluir aspectos como el tamaño, la forma, o el color .
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class))
Un concepto que debemos de tener en mente es el scaling.
Asignara automaticamente un nivel único del aes (en este caso el color) a cada valor único de la variable.
A la hora de generar subplots la función face_wrap nos facilita la implementacion.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class,nrow = 2)
Como hemos mencionado anteriormente, un geom es el objeto geometrico que un gráfico utiliza para representar la informacion. Podemos tener de todo tipo, ( puntos, barras..etc).
En este caso geom_smooth nos permite definir una línea diferente para cada variable, con un tipo de linea diferente para cada valor único de cada variable. Por ejemplo; en este primer grafico separa los coches en tres lineas en base a su valor drv.
Tambien, podemos añadir el argumento group, lo que en consecuencia agrupara automaticamente los datos para estos geoms.
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy,linetype = drv))
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy,group = drv))
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy,color = drv))
Un aspecto a tener en cuenta, es todo lo relacionado con la duplicidad de codigo. Por ejemplo, si en vez de plotear en el eje Y la variable “Hwy” quisieramos visualizar otra cualquier en vez de tener que cambiarlo en diferentes lineas podemos escalar el mapping a un nivel mas global dentro de ggplot() lo que afecta de manera global al codigo y es más agil.
Si por otro lado, lo añadimos dentro de un geom() le dará una importancia local para el layer, unica y exclusivamente.
El siguiente plot es el ejemplo idoneo de localizar data en cada geom.
ggplot(data = mpg,mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth(data = filter(mpg,class == "subcompact"),se = FALSE)
Otros graficos muy usados y comunes son los barcharts, que se representan con geom_bar.
Sobre el funcionamiento de este tipo de graficos es de esta manera; dividen los datos y posteriormente visualizan las agrupaciones de datos que hemos dividido anteriormente,lo que se tiene en cuenta son, por tanto, los puntos que caen en cada seccion bineada.
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = cut))
En el siguiente grafico podemos encontrar un nuevo argumento denominado fill.
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity))
En este caso, mostramos la claridad del dimante segun su tipo de corte. A destacar que en este caso al definir el argumento fill = clarity nuestras barras se quedan fijas de manera automatica. Si quisieramos barras dinámicas tendríamos que utilizar el argumento position = “dodge”,position = “fill” y position = “identity”, entre otros.
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")