Graficar en R

R y R Studio presenta también una gran cantidad de opciones para la visualización y grafica de información. Algunas ya están incorporadas por defecto, como plot y hist, aunque no sean los más usados.

Si tomamos como referencia la EPH del primer trimestre 2023, usando la carga vista en el taller anterior, utilizamos df como el objeto que guarde la misma, tal que:

df <- read.csv(file="datos/usu_individual_T123.txt", 
                header = TRUE, 
                sep = ";", 
                dec= ",")

Funciones hist y plot

Podemos utilizar la función hist para realizar un histograma de frecuencias de la cantidad de encuestados por sexo o edad:

hist(df$CH04)

hist(df$CH06)

La función plot se centra en realizar diversos tipos de gráficos con énfasis en realizar vinculación en el comportamiento de dos variables. Por ejemplo, si queres relacionar edad (CH06) e ingresos (P21), o su logaritmo log(df$P21)

plot(df$CH06, df$P21)

plot(df$CH06, log(df$P21))

La función plot tiene diversos tipos, los cuales pueden consultarte en ?plot, indagando en el argumento type.

Librería ggplot2

La libreía ggplot2 es la librería más difundida para realizar gráficos en R, aunque no es la única. A través de la misma se pueden hacer una gran cantidad de gráficos, de diversos tipos y con la posibilidad de superponer diversas capas. Aquí abarcaremos algunos tipos de gráficos, a fin de introducir la lógica de armado de los gráficos, pero lejos estará de ser una mirada exhautiva. Para poder ver las diversas alternativas se puede ver su cheatsheet.

Lógica de ggplot2

La sintaxis de ggplot2() parte de una sucesión de capas que se construye de una a la vez pero se presentan en conjunto. La sintaxis comienza con la definición de la fuente de datos y las variables a involucrar, ya sea en el eje X, el eje Y, en los colores, tamaños, etiquetas, etc. A partir de la misma se agregar diversas capas con el operador +. Estas capas le agregaran el tipo de gráfico: geom_point() de puntos, geom_bar() un gráfico de barras, geom_line()de líneas, entre otras posibilidades. Posteriormente se pueden ir agregando diversas configuraciones como títulos labs(), estilos theme(), entre otros.

Repliquemos el gráficos de puntos que relaciona la edad CH06 y el ingreso P21. En primer lugar, la función ggplot fija los elementos generales, como variables aplicables a todos los gráficos, pero no especifica ningún tipo de gráfico.

library(ggplot2)

Gráfico de dos variables - scatterplot

ggplot(data=df, aes(x = CH06, y = P21)) #determina condiciones generales pero no grafica

ggplot(data=df, aes(x = CH06, y = P21))+
  geom_point() #suma un tipo de gráfico

#o su función con el logaritmo del ingreso 

ggplot(data=df, aes(x = CH06, y = log(P21)))+
  geom_point()

A partir de acá se podrían incorporar distintas dimensiones como separar por distintos colores, por ejemplo por sexo CH04, e incorporando titulos en los ejes y en el gráfico.

ggplot(data=df, aes(x = CH06, 
                    y = log(P21), 
                    color=as.factor(CH04)))+
  geom_point()+
  labs(x = "Edad", 
       y = "Logaritmo del ingreso",
       title = "Relacion ingreso y edad")

También se pueden agregar más capas de gráficos sobre este mismo. Por ejemplo, se podría incorporar la relación entre ambas variables a través de un gráfico lineal, con la función geom_smooth(). Si se incorpora dicha función sin mayores modificaciones, nos devolverá una representación lineal según una fórmula predeterminada (método GAM), dividido según las especificaciones que se expresaron anteriormente en la función ggplot. En nuestro caso, nos presentará una curva por cada color.

ggplot(data=df, aes(x = CH06, 
                    y = log(P21), 
                    color=as.factor(CH04)))+
  geom_point()+
  geom_smooth()+
  labs(x = "Edad", 
       y = "Logaritmo del ingreso",
       title = "Relacion ingreso y edad")

Cuando vayamos agregando distintas capas, a las cuales les queremos dar configuraciones específicas a cada capa (por ejemplo, colores o formas), debemos realizar la configuración aes() en forma local para cada función.

Por ejemplo, harmemos dos gráficos distintos. Uno donde los puntos estén divididos por los colores según el sexo CH04, pero la línea de tendencia sea global, y otro al revez, donde los puntos sean todos iguales pero las líneas de tendencia sean divididas por sexo CH04 cambiando de color. Por último, un tercer ejemplo donde tengamos los puntos pero con formas geom_point(aes(shape = REGION)) según la región a la que pertenecen, y que la línea de la función geom_smooth() siga una función lineal a través del argumento geom_smooth(method = "lm").

# Ejemplo 1
ggplot(data=df, aes(x = CH06, 
                    y = log(P21)))+
  geom_point(aes(color=as.factor(CH04)))+
  geom_smooth()+
  labs(x = "Edad", 
       y = "Logaritmo del ingreso",
       title = "Relacion ingreso y edad")

# Ejemplo 2
ggplot(data=df, aes(x = CH06, 
                    y = log(P21)))+
  geom_point()+
  geom_smooth(aes(color=as.factor(CH04)))+
  labs(x = "Edad", 
       y = "Logaritmo del ingreso",
       title = "Relacion ingreso y edad")

# Ejemplo 3
ggplot(data=df, aes(x = CH06, 
                    y = log(P21)))+
  geom_point(aes(shape = as.factor(REGION)))+
  geom_smooth(aes(color=as.factor(CH04)),
              method = "lm")+
  labs(x = "Edad", 
       y = "Logaritmo del ingreso",
       title = "Relacion ingreso y edad")

Gráfico de una variable

Los ejemplos anteriores especifican gráficos de relación de dos variables, pero también se pueden realizar gráficos de una única variable. Por ejemplo, a través de la función geom_bar() se presenta un gráfico de barras, previo una función ggplot() donde solo se defina una única variable.

Por ejemplo, podemos realizar un conteo de la cantidad de encuestados según la variable sexo CH04.

ggplot(df, aes(x = CH04))+
  geom_bar()+
  labs(x = "Sexo",
       y = "Cantidad")

A partir de las mismas, podemos establecer diversos argumentos para diferenciarlo según otras categorías, como REGION cambiando el color, o el arguento weightpara definir una variable de ponderación, en el caso de la EPH PONDERA, aunque no es la única variable de ponderación.

ggplot(df, aes(x = CH04, weight = PONDERA))+
  geom_bar(aes(fill = as.factor(REGION)))+
  labs(x = "Sexo",
       y = "Cantidad")

Generalidades

Con esta lógica, es posible establecer diversos gráficos para situaciones con una única variable continua, discreta, la combinación de variables continuas y discretas, la incorporación de líneas de referencia, configuraciones específicas, temáticas, entre otros. Para ver opciones y detalles se recomienda ver el cheatsheet.

Otras librerías

Si bien ggplot2 es la librería gráfica más difundida de R, para la cual se cuenta una gran cantidad de materiales de consulta y elementos para su utilización. A continuación presentaremos algunas librería puntuales que aportan distintas alternativas a ggplot2.

Librería plotly

La librería plotly se caracteriza por producir gráficos interactivos y de calidad para publicación. Se puede introducir en dicha librería en la página de plotly.

Para trabajar con plotly primero se define los datos generales del gráfico a través de la función plot_ly() donde se definen fuentes de datos, variables y otras definiciones gráficas (opciones de marcadores, tamaños, entre otros). Posteriormente, se concatena a través de un pipeline %>% con la función layout(), la cual establece opciones de visualización. La función layout() también permite vincular la variable x definida en la función plot_ly con diversas variables y.

Si retomamos el ejemplo del scatterplot donde vinculamos edad CH06 con el logaritmo del ingreso P21 , su planteo general sería:

library(plotly)
library(dplyr)

plot_ly(data = df, x = df$CH06, y = log(df$P21), color = as.factor(df$CH04))

También podríamos producir gráficos de barras, como el ejemplo referido anteriormente:

plot_ly(data = df, x = as.factor(df$CH04)) 
#o con su opción con distintas regiones

plot_ly(data = df, x = as.factor(df$CH04), color = as.factor(df$REGION), type="histogram") %>% layout(barmode="stack")