Reiniciar Sesión
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:
# iris es un set de datos clásico, que ya viene incorporado en R
iris[1:10,]
plot(iris)
#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
plot(iris$Sepal.Length,type = "l") # Una linea que una cada valor
plot(iris$Sepal.Length,type = "b") #Ambas
hist(iris$Sepal.Length, col = "lightsalmon1", main = "Histograma")
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.
ruta_archivo <- "../resultados/grafico1.PNG"
ruta_archivo
[1] "../resultados/grafico1.PNG"
png(ruta_archivo)
plot(iris$Sepal.Length,type = "b")
dev.off()
null device
1
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.
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:
geom_col()
, de línea, geom_line()
, de puntos, geom_point()
, boxplot, geom_boxplot()
)labs()
theme()
scale_y_continuous
,scale_x_discrete
facet_wrap()
,facet_grid()
ggplot
tiene muchos comandos, y no tiene sentido saberlos de memoria, es siempre útil reutilizar gráficos viejos y tener a mano el machete.
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 =
fill =
shape =
size =
alpha =
Abrir un mismo gráfico según alguna variable discreta: facet_wrap()
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')
.
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.
library(tidyverse) # cargamos la librería
ggplot(data = iris, aes(x = Petal.Length, Petal.Width, color = Species))+
geom_point(alpha=0.75)+
labs(title = "Medidas de los pétalos por especie")+
theme(legend.position = 'none')+
facet_wrap(~Species)
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.
g <- ggplot(data = iris, aes(x = Petal.Length, Petal.Width, color = Species))
g
Luego, defino el tipo de gráfico. El alpha me permite definir la intensidad de los puntos
g <- g + geom_point(alpha=0.25)
g
Las siguientes tres capas me permiten respectivamente:
g <- g +
labs(title = "Medidas de los pétalos por especie")+
theme(legend.position = 'none')+
facet_wrap(~Species)
g
La librería GGplot tiene a su vez muchas otras librerías que extienden sus potencialidades. Entre nuestras favoritas están:
library(GGally)
ggpairs(iris, mapping = aes(color = Species))
library(ggridges)
Attaching package: ‘ggridges’
The following object is masked from ‘package:ggplot2’:
scale_discrete_manual
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
iris <- iris
#Correr en la consola
esquisse::esquisser()
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"
class(Individual_t119$CH04)
[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
ggplot(ggdata, aes(x= CH04, y = P21, group = CH04, fill = CH04 )) +
geom_boxplot()+
scale_y_continuous(limits = c(0, 40000))+
facet_grid(~ NIVEL_ED, labeller = "label_both") +
theme(legend.position = "none")