2  Gráficos

En esta sección veremos múltiples operaciones relacionadas principalmente al manejo de gráficos en R.

2.1 Etiquetas en gráficos de barras

Utilizaremos el dataset popPER del paquete popPyramid.

library(popPyramid)
df <- popPER

library(dplyr)
glimpse(df)
Rows: 5,832
Columns: 5
$ Year       <chr> "1995", "1995", "1995", "1995", "1995", "1995", "1995", "19…
$ Sex        <chr> "Mujer", "Mujer", "Mujer", "Mujer", "Mujer", "Mujer", "Muje…
$ Age        <chr> "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11…
$ gAge       <chr> "[00,05)", "[00,05)", "[00,05)", "[00,05)", "[00,05)", "[05…
$ Population <dbl> 306436, 305522, 305761, 305660, 304977, 306605, 304237, 300…

Para hacer más sencillo el ejercicio, seleccionaremos solo unos pocos años.

df <- filter(df, Year<=2000)

Obtenemos un resumen de la población total (expresada en millones) por año y sexo.

tabla <- df |>
  ungroup() |>
  group_by(Year, Sex) |>
  summarise(Total = round(sum(Population)/1000000, 1))

tabla
# A tibble: 12 × 3
# Groups:   Year [6]
   Year  Sex    Total
   <chr> <chr>  <dbl>
 1 1995  Hombre  12.1
 2 1995  Mujer   12.2
 3 1996  Hombre  12.3
 4 1996  Mujer   12.4
 5 1997  Hombre  12.5
 6 1997  Mujer   12.6
 7 1998  Hombre  12.7
 8 1998  Mujer   12.9
 9 1999  Hombre  13  
10 1999  Mujer   13.1
11 2000  Hombre  13.1
12 2000  Mujer   13.3

Ahora, elaboremos un gráfico de barras en ggplot2.

library(ggplot2)

ggplot(tabla, aes(x=Year, y=Total, fill=Sex)) +  
  geom_bar(stat="identity") +
  theme(axis.text.x = element_text(angle=90, vjust=0.5)) 

Añadimos los etiquetas de los datos con geom_text.

ggplot(tabla, aes(x=Year, y=Total, fill=Sex)) +  
  geom_bar(stat="identity") +
  geom_text(aes(y=Total, label=Total), vjust=-0.5, color="black", size=4) +
  theme(axis.text.x = element_text(angle=90, vjust=0.5)) 

Como se observa, las etiquetas se superponen. En concreto, el valor de las etiquetas para las mujeres es el correcto, pero no para los hombres. Esto ocurre porque una cosa es el valor de cada combinación Year + Sex (la altura de la barra) y otra distinta es la altura de la etiqueta que esta combinación debe alcanzar en el gráfico.

Por ejemplo, para la primera barra, que corresponde al año 1995, el valor para las mujeres es 12.2 y para los hombres es 12.1. La altura de la etiqueta para las mujeres coincidirá con el valor de su etiqueta (12.2). Sin embargo, para los hombres, la altura de su etiqueta será la suma de los valores de las etiquetas de los hombres y mujeres. Es decir 12.1 + 12.2 para el año de 1995.

Por tanto, lo que necesitamos es añadir una columna con las sumas acumuladas para cada combinación Year + Sex en nuestra tabla resumen. Eso lo lograremos con cumsum.

tabla <- tabla |>
  arrange(Year, desc(Sex)) |>
  group_by(Year) |>
  mutate(Total_Acum = cumsum(Total))

tabla
# A tibble: 12 × 4
# Groups:   Year [6]
   Year  Sex    Total Total_Acum
   <chr> <chr>  <dbl>      <dbl>
 1 1995  Mujer   12.2       12.2
 2 1995  Hombre  12.1       24.3
 3 1996  Mujer   12.4       12.4
 4 1996  Hombre  12.3       24.7
 5 1997  Mujer   12.6       12.6
 6 1997  Hombre  12.5       25.1
 7 1998  Mujer   12.9       12.9
 8 1998  Hombre  12.7       25.6
 9 1999  Mujer   13.1       13.1
10 1999  Hombre  13         26.1
11 2000  Mujer   13.3       13.3
12 2000  Hombre  13.1       26.4

Ahora ya podemos ubicar correctamente las etiquetas en nuestro gráfico.

ggplot(tabla, aes(x=Year, y=Total, fill=Sex)) +  
  geom_bar(stat="identity") +
  geom_text(aes(y=Total_Acum, label=Total), vjust=-0.5, color="black", size=4) +
  theme(axis.text.x = element_text(angle=90, vjust=0.5)) 

2.2 Crear una paleta de colores

Utilizaremos el paquete makePalette. Este paquete contiene funciones que le permiten crear su propia paleta de colores a partir de una imagen, utilizando algoritmos matemáticos.

library(makePalette)

Debe tener la imagen en su disco duro o bien trabajar con la URL de una imagen.

Por ejemplo, la siguiente imagen está alojada en la ruta https://github.com/musajajorge/makePalette/raw/main/imgs/picture02.jpg

Usaremos la función makePaletteCLARA. Con el parámetro n podemos definir el número de elementos a obtener para nuestra paleta.

img = "picture02.jpg"
paleta <- makePaletteCLARA(img, n=7)

paleta
<colors>
#947F3EFF #DEB299FF #ACA593FF #99A9CDFF #8A778AFF #D07189FF #5085EBFF 

Luego, podemos usar la paleta en cualquier tipo de gráficos, por ejemplo, en un barplot.

barplot(1:length(paleta), col=paleta)