3.6 Manipulación de gráficos
En esta sección listamos algunas recomendaciones útiles para hacer que nuestros gráficos logren comunicar información mejor. Esto es importante cuando uno usa gráficos en el contexto de un reporte o presentación.
Rotulación
Uno de los aspectos más importantes para elaborar un gráfico efectivo es que quien lo lea entienda claramente qué información está siendo representada en este. Para esto es preciso rotular claramente cada elemento de un gráfico.
En ggplot usamos el comando labs()
, el cual recibe como argumentos posibles:
title
: permite cambiar el título del gráfico.subtitle
: permite cambiar el subtítulo del gráfico.caption
: permite crear una breve descripción del gráfico (llamada caption en Inglés).x
: permite cambiar el nombre del eje x en el gráfico.y
: permite cambiar el nombre del eje y en el gráfico.- El nombre de alguna estética (como
color
,fill
,shape
, etc.): permite cambiar el título de la leyenda asociada a una estética (objeto que explica cómo están representados los valores según dicha estética).
A modo de ejemplo, veamos cómo rotular de manera más clara el siguiente gráfico de dispersión que compara la profundidad del pico de un pinguino con su largo del pico, para distintas especies.
A continuación una versión rotulada del mismo gráfico:
penguins %>%
ggplot(aes(x = bill_depth_mm, y = bill_length_mm, color = species)) +
geom_point() +
labs(title = "Largo y Profundidad de Pico",
subtitle = "Medidos en Pingüinos del Archipiélago de Palmer, Antártica",
caption = "Datos recolectados durante 2007 - 2009 por la Dra. Kristen Gorman,
junto con el Programa de Investigación Ecológica a Largo Plazo de la
Estación Palmer (LTER).",
x = "Produnfidad de Pico (mm)",
y = "Largo de Pico (mm)",
color = "Especie de Pingüino")
La meta al rotular un gráfico es conseguir que si copiamos y pegamos este gráfico en un documento en blanco (sin todo el código que lo generó), se pueda entender perfectamente. Es decir, que esté autocontenido.
Te recomendamos siempre detenerte a rotular claramente los gráficos que serán usados en un informe o presentación. Esto puede ser incluso más importante que colores u otros aspectos estéticos.
Rotación de las etiquetas de un eje
Veamos por ejemplo, la distribución de la variable species
(especie) de los personajes en la tabla de datos starwars
. Nota que primero agrupamos por especie y contamos el número de filas en cada grupo:
El gráfico tiene un problema: es imposible ver los nombres de las especies en el eje horizontal. Para resolver esto podemos rotar las etiqueta, agregando el comando guides()
:
El parámetro angle
es el ángulo en el que se rotan las etiquetas.
Cambiar el número de ticks en un eje
starwars %>%
group_by(gender) %>%
summarise(conteo = n()) %>%
ggplot(aes(x = gender, y = conteo)) +
geom_col() +
labs(title = "Género de los personjes de Starwars",
x = "Género",
y = "Cantidad") + #Título de nuestros ejes
scale_y_continuous(breaks=seq(0, 100, 5)) # Que parta del 0 que llegue hasta el 100 y que vaya en intervalos de 5
Cambiar el formato de números en ejes
Supongamos que tenemos la siguiente base de datos con valores numéricos grandes:
datos_grandes <- tibble(Nombre = c("Bob", "Ana", "Jes"),
Valor = c(2023889, 5998300, 3700112))
datos_grandes
## # A tibble: 3 × 2
## Nombre Valor
## <chr> <dbl>
## 1 Bob 2023889
## 2 Ana 5998300
## 3 Jes 3700112
Es usual que al graficar estos datos, por ejemplo en un gráfico de columnas, ggplot2 utilice notación científica para las etiquetas de los ejes:
Podemos cambiar esto de dos maneras:
- Usando el comando
scale_y_continuous()
, junto con el argumentolabels = scales::label_comma()
:
datos_grandes %>%
ggplot(aes(x = Nombre, y = Valor)) +
geom_col() +
scale_y_continuous(labels = scales::label_comma())
Para más maneras de cambiar el formato de las etiquetas de un eje (porcentaje, moneda, etc.), recomendamos consultar la siguiente sección del libro ggplot2: Elegant Graphics for Data Analysis.
- Cambiando manualmente la escala del eje en cuestión, para mejorar la legibilidad. En este caso es importante dejar plasmado en el gráfico el cambio de escala realizado.
Anotaciones al cuerpo del gráfico
starwars %>%
group_by(gender) %>%
summarise(conteo = n()) %>%
ggplot(aes(x = gender, y = conteo)) +
geom_col() +
labs(title = "Género de los personjes de Starwars",
x = "Género",
y = "Cantidad") + #Título de gráfico y ejes
geom_text(data = NULL, x = 3, y = 40, label = "Esto es una anotación")
Podemos agregar una etiqueta con las cantidades a las columnas de cada especie
Cambiar la paleta de colores
starwars %>%
group_by(gender) %>%
summarise(conteo = n()) %>%
ggplot(aes(x = gender, y = conteo)) +
geom_col() +
labs(title = "Género de los personjes de Starwars",
x = "Género",
y = "Porcentaje") + #Título de nuestros ejes
theme(plot.title = element_text(family="Times New Roman",
size=rel(1), #Tamaño relativo de la letra del título
vjust=2, #Justificación vertical, para separarlo del gráfico
face="bold", #Letra negrilla. Otras posibilidades "plain", "italic", "bold" y "bold.italic"
color="green", #Color del texto
lineheight=1.5)) + #Separación entre líneas
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="orange", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="blue", size=rel(0.75)))
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family
## not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
Exportar un gráfico
Una manera simple y efectiva de usar imágenes generadas por ggplot2 en informes o presentaciones (no generadas con RMarkdown) es realizar capturas de pantalla usando los atajos de teclado de tu computador:
- Windows:
Windows Key
+Shift
+S
- MacOS:
Command
+Control
+Shift
+4
Sin embargo, existen ocaciones en que la resolución de las imágenes obenidas no es
la mejor. Otra manera de exportar imágenes (que resuelve este problema) es utilizar
el comando ggsave()
de ggplot2. El formato del archivo de salida puede ser especificado
a través del nombre de este.
Veamos un ejemplo: