4.1 Explicación
4.1.1 Gráficos Básicos en R
Rbase tiene algunos comandos genéricos para realizar gráficos, que se adaptan al tipo de información que se le pide graficar, por ejemplo:
- plot()
- hist()
## id Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 1 5.1 3.5 1.4 0.2 setosa
## 2 2 4.9 3.0 1.4 0.2 setosa
## 3 3 4.7 3.2 1.3 0.2 setosa
## 4 4 4.6 3.1 1.5 0.2 setosa
## 5 5 5.0 3.6 1.4 0.2 setosa
## 6 6 5.4 3.9 1.7 0.4 setosa
## 7 7 4.6 3.4 1.4 0.3 setosa
## 8 8 5.0 3.4 1.5 0.2 setosa
## 9 9 4.4 2.9 1.4 0.2 setosa
## 10 10 4.9 3.1 1.5 0.1 setosa
#Al especificar una variable, puedo ver el valor que toma cada uno de sus registros (Index)
plot(iris$Sepal.Length,type = "p") # Un punto por cada valor
4.1.1.1 png
La función png()
nos permite grabar una imagen en el disco. Lleva como argumento principal la ruta completa a donde se desea guardar la misma, incluyendo el nombre que queremos dar al archivo. A su vez pueden especificarse otros argumentos como el ancho y largo de la imagen, entre otros.
## [1] "resultados/grafico1.PNG"
## png
## 2
La función png()
abre el dispositivo de imagen en el directorio especificado. Luego creamos el gráfico que deseamos (o llamamos a uno previamente construido), el cual se desplegará en la ventana inferior derecha de la pantalla de Rstudio. Finalmente con dev.off()
se cierra el dispositivo y se graban los gráficos.
Los gráficos del R base son útiles para escribir de forma rápida y obtener alguna información mientras trabajamos. Muchos paquetes estadísticos permiten mostrar los resultados de forma gráfica con el comando plot
(por ejemplo, las regresiones lineales lm()
).
Sin embargo, existen librerías mucho mejores para crear gráficos de nivel de publicación. La más importante es ggplot2, que a su vez tiene extensiones mediante otras librerías.
4.1.2 Ggplot2
ggplot
tiene su sintaxis propia. La idea central es pensar los gráficos como una sucesión de capas, que se construyen una a la vez.
El operador
+
nos permite incorporar nuevas capas al gráfico.El comando
ggplot()
nos permite definir la fuente de datos y las variables que determinaran los ejes del grafico (x,y), así como el color y la forma de las líneas o puntos,etc.Las sucesivas capas nos permiten definir:
- Uno o más tipos de gráficos (de columnas,
geom_col()
, de línea,geom_line()
, de puntos,geom_point()
, boxplot,geom_boxplot()
) - Títulos
labs()
- Estilo del gráfico
theme()
- Escalas de los ejes
scale_y_continuous
,scale_x_discrete
- División en subconjuntos
facet_wrap()
,facet_grid()
- Uno o más tipos de gráficos (de columnas,
ggplot
tiene muchos comandos, y no tiene sentido saberlos de memoria, es siempre útil reutilizar gráficos viejos y tener a mano el machete.
4.1.2.1 Dimensiones del gráfico
Esta forma de pensar los gráficos nos permite repenser los distintos atributos como potenciales aliados a la hora de mostrar información multidimensional. Por ejemplo:
- color
color =
- relleno
fill =
- forma
shape =
- tamaño
size =
- transparencia
alpha =
Abrir un mismo gráfico según alguna variable discreta:
facet_wrap()
- Los atributos que queremos que mapeen una variable, deben ir dentro del aes(),
aes(... color = variable)
Cuando queremos simplemente mejorar el diseño (es fijo), se asigna por fuera, o dentro de cada tipo de gráficos,
geom_col(color = 'green')
.
4.1.2.2 Gráfico de Puntos
A continuación se muestra un gráfico de varias capas de construcción, con su correspondiente porción de código. En el mismo se buscará visualizar, a partir de la base de datos iris la relación entre el ancho y el largo de los petalos, mediante un gráfico de puntos.
4.1.2.3 Capas del Gráfico
Veamos ahora, el “paso a paso” del armado del mismo.
En primera instancia solo defino los ejes. Y en este caso un color particular para cada Especie.
Luego, defino el tipo de gráfico. El alpha me permite definir la intensidad de los puntos
Las siguientes tres capas me permiten respectivamente:
- Definir el título del gráfico
- Quitar la leyenda
- Abrir el gráfico en tres fragmentos, uno para cada especie
4.1.2.4 Extensiones de GGplot.
La librería GGplot tiene a su vez muchas otras librerías que extienden sus potencialidades. Entre nuestras favoritas están:
- gganimate: Para hacer gráficos animados.
- ggridge: Para hacer gráficos de densidad faceteados
- ggally: Para hacer varios gráficos juntos.
- treemapify
library(ggridges)
ggplot(iris, aes(x = Sepal.Length, y = Species, fill=Species)) +
geom_density_ridges()
También hay extensiones que te ayudan a escribir el código, como esquisse
4.1.3 Ejemplo con datos reales
4.1.3.1 Boxplot de ingresos de la ocupación principal, según nivel educativo
Individual_t119 <- read.table("fuentes/usu_individual_t119.txt",
sep=";", dec=",", header = TRUE, fill = TRUE)
Hacemos un procesamiento simple: Sacamos los ingresos iguales a cero y las no respuestas de nivel educativo.
Es importante que las variables sean del tipo que conceptualmente les corresponde (el nivel educativo es una variable categórica, no continua), para que el ggplot pueda graficarlo correctamente.
# Las variables sexo( CH04 ) y Nivel educativo están codificadas como números, y el R las entiende como numéricas.
class(Individual_t119$NIVEL_ED)
## [1] "integer"
## [1] "integer"
ggdata <- Individual_t119 %>%
filter(P21>0, !is.na(NIVEL_ED)) %>%
mutate(NIVEL_ED = as.factor(NIVEL_ED),
CH04 = as.factor(CH04))
ggplot(ggdata, aes(x = NIVEL_ED, y = P21)) +
geom_boxplot()+
scale_y_continuous(limits = c(0, 40000))#Restrinjo el gráfico hasta ingresos de $40000
Si queremos agregar la dimensión sexo, podemos hacer un facet_wrap()
ggplot(ggdata, aes(x= NIVEL_ED, y = P21, group = NIVEL_ED, fill = NIVEL_ED )) +
geom_boxplot()+
scale_y_continuous(limits = c(0, 40000))+
facet_wrap(~ CH04, labeller = "label_both")
Por la forma en que está presentado el gráfico, el foco de atención sigue puesto en las diferencias de ingresos entre niveles educativo. Simplemente se agrega un corte por la variable de sexo.
Si lo que queremos hacer es poner el foco de atención en las diferencias por sexo, simplemente basta con invertir la variable x especificada con la variable utilizada en el facet_wrap