Las grĆ”ficas son comunicación. Para comunicar es imprescindible facilitar la comprensión de la grĆ”fica, evitando esfuerzos para su interpretación. Eso lo han entendido muy bien algunos periódicos, pero aĆŗn estĆ”n lejos de entenderlo los cientĆficos, las televisiones y sobretodo la Administración PĆŗblica.
La teorĆa de la visualización nos dice que se debe tender al minimalismo y evitar representar datos irrelevantes, que los fondos deben ser claros, evitar el 3D. En resumen, usar poca tinta.
Como dice Tufte:
āLa excelencia grĆ”fica es la que le da al espectador el mayor nĆŗmero de ideas en el menor tiempo posible con la menor cantidad de tinta en el espacio mĆ”s pequeƱoā
La pandemia del covid supuso un enorme esfuerzo de comunicación para dar conocer la situación mediante grĆ”ficas. Fue un momento en el que, por un lado, existĆa mucha demanda de este tipo de información y por otro, no se estuvo a la altura en todos los casos de ofrecerla adecuadamente.
Esta grÔfica es un ejemplo de mala comunicación visual: fechas en vertical apelotonadas, grÔfica de doble escala en la que una variable tapa a la otra. Lo único que se puede observar son las olas y su magnitud. El resto de la información no ayuda, a pesar de lo detallado de las fechas.
No es fĆ”cil llegar al equilibrio entre minimalismo y detalle de una manera objetiva. Las visualizaciones estĆ”n sujetas a distintas percepciones y por supuesto a distintas preferencias. Sin embargo, si que existen unos mĆnimos que estĆ”n aceptados por los especialistas en visualización y que la librerĆa ggplot ofrece de manera estĆ”ndard. No obstante, estas librerĆas ofrecen una enorme cantidad de recursos para la personalización de las grĆ”ficas.
Vamos a ver con un ejemplo sencillo, cómo dar forma a una grÔfica desde la visualización bÔsica de ggplot hasta una personalización detallada de la misma. Los datos que usaremos serÔn los de desempleo que ofrece el INE.
if (!"tidyverse" %in% installed.packages()) {install.packages("tidyverse")}
if (!"scales" %in% installed.packages()) {install.packages("scales")}
if (!"ggrepel" %in% installed.packages()) {install.packages("ggrepel")}
if (!"ggtext" %in% installed.packages()) {install.packages("ggh4x")}
library("tidyverse") # Suit completa
library("scales") # Formato de las escalas
library("ggrepel") # Para etiquetas
library("ggtext") # Dar color a los textos enriquecidos
Los colores se definen como constantes para facilitar su ajuste en una sola casilla
COLOR_HOMBRES <- "#0a7ea7"
COLOR_MUJERES <- "#a75ae0"
COLOR_TEXTO <- "#5a5856"
COLOR_MEDIA <- "#5a5856"
COLOR_PP <- "#05d4f9"
COLOR_PSOE <- "#ff0000"
Un ejemplo sencillo, los datos del paro, diponibles aqui
El INE ofrece los datos en un formato āa lo largoā que consiste en minimizar el nĆŗmero de columnas, haciendo que cada columna tenga distintos atributos. En este caso los datos estĆ”n agregados en distintos niveles
Sexo: Ambos sexos, Mujeres y Hombres
Comunidades y Ciudades Autónomas: Total Nacional y por autonomĆas
Edad: Total y por franjas de edad
Para cada agregación se ofrece
Periodo: el trimestre en formato YYYYTn
Total: el ratio
# Descargar los datos del paro (tabla 4247)
# Son datos a lo largo
url_4247 <- "https://www.ine.es/jaxiT3/files/t/es/csv_bdsc/4247.csv?nocab=1"
datos <- read_csv2(url_4247, na = c(".."), show_col_types = FALSE) # Leemos y quitamos los valores nulos
head (datos)
## # A tibble: 6 Ć 5
## Sexo `Comunidades y Ciudades Autónomas` Edad Periodo Total
## <chr> <chr> <chr> <chr> <dbl>
## 1 Ambos sexos Total Nacional Total 2023T2 11.6
## 2 Ambos sexos Total Nacional Total 2023T1 13.3
## 3 Ambos sexos Total Nacional Total 2022T4 12.9
## 4 Ambos sexos Total Nacional Total 2022T3 12.7
## 5 Ambos sexos Total Nacional Total 2022T2 12.5
## 6 Ambos sexos Total Nacional Total 2022T1 13.6
Estos datos son incómodos de usar y se adaptan para facilitar su manejo.
Cambiar el nombre de la columna āComunidades y Ciudades Autónomasā por āccaaā
Convertir en fecha el formato aƱo-trimestre
paro <- datos %>%
rename (ccaa= `Comunidades y Ciudades Autónomas`) %>% # cambiar de nombre de variable por comodidad
separate(Periodo, c("year", "quarter"), sep="T") %>% # Separar trimestre de aƱo
mutate (fecha =
ifelse (quarter == "4",
paste0(year, "-", as.integer(quarter) * 3, "-30"),
paste0(year, "-0" ,as.integer(quarter) * 3, "-30"))) # Generar la fecha
paro$fecha <- as.Date (paro$fecha, format= "%Y-%m-%d") # Aplicar tipo fecha
head (paro)
## # A tibble: 6 Ć 7
## Sexo ccaa Edad year quarter Total fecha
## <chr> <chr> <chr> <chr> <chr> <dbl> <date>
## 1 Ambos sexos Total Nacional Total 2023 2 11.6 2023-06-30
## 2 Ambos sexos Total Nacional Total 2023 1 13.3 2023-03-30
## 3 Ambos sexos Total Nacional Total 2022 4 12.9 2022-12-30
## 4 Ambos sexos Total Nacional Total 2022 3 12.7 2022-09-30
## 5 Ambos sexos Total Nacional Total 2022 2 12.5 2022-06-30
## 6 Ambos sexos Total Nacional Total 2022 1 13.6 2022-03-30
Se va a representar en un line chart la evolución del paro desde el 2002 hasta el momento actual, segregado por sexo. Se usarÔ la agregación por Hombres y Mujeres sobre el total nacional y el total por edad.
Para la grƔfica que se va a realizar sobre la se necesitan los datos agregados por sexo, por total nacional y el total por edad
# filtrar los datos
paro_sexo <- paro %>%
filter(
Sexo != "Ambos sexos" &
ccaa == "Total Nacional" &
Edad == "Total"
)
head(paro_sexo)
## # A tibble: 6 Ć 7
## Sexo ccaa Edad year quarter Total fecha
## <chr> <chr> <chr> <chr> <chr> <dbl> <date>
## 1 Hombres Total Nacional Total 2023 2 10.2 2023-06-30
## 2 Hombres Total Nacional Total 2023 1 11.6 2023-03-30
## 3 Hombres Total Nacional Total 2022 4 11.3 2022-12-30
## 4 Hombres Total Nacional Total 2022 3 10.7 2022-09-30
## 5 Hombres Total Nacional Total 2022 2 11.0 2022-06-30
## 6 Hombres Total Nacional Total 2022 1 12.0 2022-03-30
Con estos datos, indicando que en el eje x esta la variable fecha y en el eje y el ratio y que segregue por sexo, tan solo hay que escribir dos lĆneas.
El resultado es una grƔfica dentro de los cƔnones, pero que al verla no sabemos de quƩ se trata.
ggplot(paro_sexo, aes(x = fecha, y = Total, color = Sexo)) +
geom_step()
En esta fase se le va a aƱadir contexto aƱadiendo el tĆtulo principal, el de los ejes, el autor, la fuente de datos, particularizando el color de las variables y aƱadiendo las unidades al eje y.
color_sexo <- c(Hombres = COLOR_HOMBRES, Mujeres = COLOR_MUJERES) # Color para sexo
ggplot(paro_sexo, aes(x = fecha, y = Total, color = Sexo)) +
geom_step() +
scale_color_manual(values = color_sexo) +
scale_y_continuous (labels=scales::percent_format(scale = 1, accuracy = 1)) + # Escala en procentajes
labs(
x = "Trimestres",
y = "Tasa de paro",
title = "Evolución de la tasa de paro por sexo",
caption ="@congosto\nFuente: INE"
)
En esta fase se va a mejorar el diseño de la grÔfica. ggplot ofrece una variedad de temas para cambiar el aspecto estético, pero se pueden particularizar. Una buena opción es generar un tema propio, basado en el que mÔs se ajuste a nuestras preferencias.
En este caso se va a particularizar:
Los colores del borde
La presencia de grids
La posición de la leyenda
La fuente y el color de los textos
El formato del tĆtulo
La proporción del tamaño de las letras de cada uno de los componentes de la grÔfica
mi_tema <- function(
base_size = 11,
base_color = COLOR_TEXTO,
base_family = "sans"
)
{
tema <-
theme_bw(base_size=base_size, base_family = base_family) +
theme(
panel.border = element_rect(colour = base_color),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.title = element_text(
size = base_size+3,
face = "bold",
color = base_color,
vjust = 1.25,
hjust = 0.5),
plot.subtitle = element_text(size=base_size + 3, color = base_color),
plot.caption = element_text(hjust = 1, size=base_size - 1, color = base_color),
legend.position ="top",
legend.text = element_text(size=base_size + 1),
text = element_text(size=base_size + 2, color = base_color),
axis.text.x = element_text(size=base_size-1, color = base_color),
axis.text.y = element_text(size=base_size-1, color = base_color),
axis.title.x = element_text(size=base_size + 2, vjust=0, color = base_color),
axis.title.y = element_text(size=base_size + 2, vjust=1.25, color = base_color),
strip.text = element_text(size=base_size, color = base_color),
strip.text.x = element_text(size=base_size, color = base_color),
strip.text.y = element_text(size=base_size, color = base_color),
)
return (tema)
}
Se aplica el tema invocando a la función del tema personalizado (mi_tema).
El resultado es una grƔfica mƔs limpia, mƔs ancha y con la leyenda mƔs fƔcil de leer.
color_sexo <- c(Hombres = COLOR_HOMBRES, Mujeres = COLOR_MUJERES) # Color para sexo
ggplot(paro_sexo, aes(x = fecha, y = Total, color = Sexo)) +
geom_step() +
scale_color_manual(values = color_sexo) +
scale_y_continuous(labels=scales::percent_format(scale = 1, accuracy = 1)) + # Escala en procentajes
labs(
x = "Trimestres",
y = "Tasa de paro",
title = "Evolución de la tasa de paro por sexo",
caption = "@congosto\nFuente: INE"
) +
mi_tema()
En esta fase se le aƱade mĆ”s contexto a la grĆ”fica. En este caso, el valor medio del paro para poder comparar como se acercan o desvĆan de la media segĆŗn sexo.
La media se encuentra en los valores agredados por Ambos sexos, Total nacional y ToTal edad
### Calcular la media de la tasa del paro de EspaƱa para cada trimestre
paro_media <- paro %>%
filter (Sexo == "Ambos sexos" &
ccaa == "Total Nacional" &
Edad == "Total")
head(paro_media)
## # A tibble: 6 Ć 7
## Sexo ccaa Edad year quarter Total fecha
## <chr> <chr> <chr> <chr> <chr> <dbl> <date>
## 1 Ambos sexos Total Nacional Total 2023 2 11.6 2023-06-30
## 2 Ambos sexos Total Nacional Total 2023 1 13.3 2023-03-30
## 3 Ambos sexos Total Nacional Total 2022 4 12.9 2022-12-30
## 4 Ambos sexos Total Nacional Total 2022 3 12.7 2022-09-30
## 5 Ambos sexos Total Nacional Total 2022 2 12.5 2022-06-30
## 6 Ambos sexos Total Nacional Total 2022 1 13.6 2022-03-30
La media la representamos como una lĆnea ancha de color gris, con transparencia para que no oculte las lineas segregadas por sexo.
color_sexo <- c(Hombres = COLOR_HOMBRES, Mujeres = COLOR_MUJERES) # Color para sexo
max_paro_sexo <- (max(n = 1, paro_sexo$Total)) # Se usa para ajustar los lĆmites de la grĆ”fica
ggplot()+
geom_step(data = paro_sexo, aes(x = fecha, y = Total, color = Sexo)) +
# Dibujar la media de EspaƱa mƔs reciente
geom_line(
data = paro_media,
aes(x = fecha, y = Total),
color = COLOR_MEDIA,
linewidth = 2,
alpha = 0.3) +
scale_y_continuous(labels = scales::percent_format(scale = 1, accuracy = 1L)) +
scale_color_manual(values = color_sexo) +
labs(
x = "Trimestres",
y = "Tasa de paro",
title = "Evolución de la tasa de paro por sexo",
caption = "@congosto\nFuente: INE"
) +
mi_tema()
En esta fase se aborda la anotación de magnitudes en la grĆ”fica. No se pueden etiquetar todos los valores ya que serĆa ilegible y quedarĆa muy recargado. En su lugar, se van a seleccionar los valores iniciales y finales de la serie y el valor mĆ”s alto.
El proceso de selección de valores se realizarÔ tanto para la serie del paro desagregado por sexo como de la media.
Para la serie desagregada por sexo, se seleccionan los valores iniciales, finales y mƔximo
Para la serie de la media, se seleccionan el valor inicial y final
Adicionalmente, la anotación producirÔ efectos secundarios:
El valor mĆ”ximo podrĆa que dar muy pegado al borde superior de la grĆ”fica. HabrĆ” que dar mĆ”s altura
Los valores iniciales y finales, quedarĆan muy pegados al borde izquierdo o derecho de la grĆ”fica. HabrĆ” que dar mĆ”s anchura
Al darle mÔs anchura pueden aparecer fechas que aún no existen. Se determinan las fechas visibles
Las etiquetas del inicio de la serie se deben alinear a la izquierda y las del final de la serie a la derecha. HabrÔ que calcular su alineación
# Seleccionar de las series, el mƔs antiguo, el mƔs reciente y el mƔs alto
max_paro <- max(paro_sexo$Total) # Se usarĆ” para ajustar el eje y
min_fecha = min(paro_sexo$fecha) # Se usarĆ” para ensanchar el eje x
max_fecha = max(paro_sexo$fecha) # Se usarĆ” para ensanchar el eje x
fechas_visibles <- (seq (min_fecha, max_fecha, by = "3 years"))
anotacion_paro_sexo <- paro_sexo %>%
filter (
fecha == min_fecha |
fecha == max_fecha |
Total == max_paro
) %>%
mutate(texto = ifelse( fecha == max_fecha, Sexo, "" )) %>%
mutate(texto = ifelse( Total == max_paro, paste0(year, "T", quarter), texto )) %>%
mutate(alineación_x = ifelse( fecha == max_fecha, 365 * 2, -365)) %>%
mutate(alineación_x = ifelse( Total == max_paro, 0, alineación_x))
anotacion_paro_media <- paro_media %>%
filter (
fecha == min(fecha) |
fecha == max(fecha)
) %>%
mutate(texto = ifelse( fecha == max_fecha, "Media", "")) %>%
mutate(alineación_x = ifelse( fecha == max_fecha, 365 * 2, -365))
head(anotacion_paro_sexo)
## # A tibble: 5 Ć 9
## Sexo ccaa Edad year quarter Total fecha texto alineación_x
## <chr> <chr> <chr> <chr> <chr> <dbl> <date> <chr> <dbl>
## 1 Hombres Total Nacional Total 2023 2 10.2 2023-06-30 "Hom⦠730
## 2 Hombres Total Nacional Total 2002 1 8.36 2002-03-30 "" -365
## 3 Mujeres Total Nacional Total 2023 2 13.2 2023-06-30 "Muj⦠730
## 4 Mujeres Total Nacional Total 2013 1 27.3 2013-03-30 "201⦠0
## 5 Mujeres Total Nacional Total 2002 1 16.4 2002-03-30 "" -365
Se utilizarĆ” ggrepel para etiquetar la grĆ”fica. Esta librerĆa es muy Ćŗtil que tiene ācierta inteligenciaā para colocar los textos sin que se solapen. No obstante, los ajustes son a veces difĆciles. En este caso afortunadamente, no. Se le indicarĆ” las coordenadas, para situar la etiqueta (x, y), el tamaƱo (size) y el color del texto (color), la alineación (eje y), el desplazamiento respecto al eje x (nudge_x) y el desplazamiento respecto al eje y (nudge_y).
Se etiquetarƔn por separado la serie de desagregada por sexo y la de la media.
Se aplicarƔn los ajustes a los ejes:
x: ensanchando el eje un aƱo por la izquierda y dos por la derecha, forzando a que solo salgan las fechas visibles
y: ampliando la altura de la grƔfica un 10% del valor mƔximo del eje y
color_sexo <- c(Hombres = COLOR_HOMBRES, Mujeres = COLOR_MUJERES) # Color para sexo
# Seleccionar de la serie el mƔs antiguo, el mƔs alto y el mƔs reciente
ggplot()+
geom_step(data = paro_sexo, aes(x = fecha, y = Total, color = Sexo)) +
# Dibujar la media de EspaƱa mƔs reciente
geom_line(
data = paro_media,
aes(x = fecha, y = Total),
color = COLOR_MEDIA,
linewidth = 2,
alpha = 0.3) +
# Anotar valores de la serie paro_sexo
geom_text_repel(
data = anotacion_paro_sexo,
aes(
x = fecha,
y = Total,
label = paste0(round(Total, 1), "% ", texto)
),
size = 3,
color = COLOR_TEXTO,
direction = "y",
nudge_x = anotacion_paro_sexo$alineación_x,
nudge_y = 1
) +
# Anotar valores de la media
geom_text_repel(
data = anotacion_paro_media,
aes(
x = fecha,
y = Total,
label = paste0(round(Total, 1), "% ", texto)
),
size = 3,
color = COLOR_TEXTO,
direction = "y",
nudge_x = anotacion_paro_media$alineación_x,
nudge_y = 1
) +
scale_y_continuous(
labels = scales::percent_format(scale = 1, accuracy = 1L),
limits = c(0, max_paro*1.1)) + # Se sube la altura para que quepa la anotación
scale_x_date(
limits = c(min_fecha - 365, max_fecha + (365*5)), # Ensanchamos eje x
breaks = fechas_visibles,
labels = date_format("%Y")
) +
scale_color_manual(values = color_sexo) +
labs(
x = "Trimestres",
y = "Tasa de paro",
title = "Evolución de la tasa de paro por sexo",
caption = "@congosto\nFuente: INE") +
mi_tema()
En este momento la grÔfica muestra de forma detallada cómo evolucionó el paro por sexo, la diferencia entre el 2002 y la fecha actual y el punto de inflexión dónde comenzó a bajar. En esta fase se va a mejorar con el uso del color.
Integrando el tĆtulo con la leyenda, aƱadiendo color en palabras claves dentro del tĆtulo. Se utilizarĆ” la librerĆa ggtext que permite enriquecer el texto.
Dar color a las etiquetas,
Eliminar la leyenda porque ya estĆ” en las anotaciones y en el texto del tĆtulo
Eliminar los tĆtulos de los ejes porque estĆ”n en el tĆtulo de la grĆ”fica
El resultado es una grĆ”fica menos formal (titulo, leyenda, tĆtulos de los ejes), pero mucho mĆ”s atractiva y concisa.
color_sexo <- c(Hombres = COLOR_HOMBRES, Mujeres = COLOR_MUJERES) # Color para sexo
# Seleccionar de la serie el mƔs antiguo, el mƔs alto y el mƔs reciente
ggplot()+
geom_step(data = paro_sexo, aes(x = fecha, y = Total, color=Sexo)) +
# Dibujar la media de EspaƱa mƔs reciente
geom_line(
data = paro_media,
aes(x = fecha, y = Total),
color = COLOR_MEDIA,
linewidth = 2,
alpha = 0.3) +
# Anotar valores de la serie paro_sexo
geom_text_repel(
data = anotacion_paro_sexo,
aes(
x = fecha,
y = Total,
label = paste0(round(Total, 1), "% ", texto),
color = Sexo
),
size = 3,
direction = "y",
nudge_x = anotacion_paro_sexo$alineación_x,
nudge_y = 1
) +
# Anotar valores de la media
geom_text_repel(
data = anotacion_paro_media,
aes(
x = fecha,
y = Total,
label = paste0(round(Total, 1), "% ", texto)
),
size = 3,
color= COLOR_TEXTO,
direction = "y",
nudge_x = anotacion_paro_media$alineación_x,
nudge_y = 1
) +
scale_y_continuous(
labels = scales::percent_format(scale = 1, accuracy = 1L),
limits = c(0, max_paro*1.1)) + # Se sube la altura para que quepa la anotación
scale_x_date(
limits = c(min_fecha - 365, max_fecha + (365 * 5)), # Ensanchamos eje x
breaks = fechas_visibles,
labels = date_format("%Y")
) +
scale_color_manual(values = color_sexo) +
labs(
title = paste(
"Evolución de la tasa del paro por trimestres de<br><b style='color:",
COLOR_MUJERES,
";'>Mujeres</b> y <b style='color:",
COLOR_HOMBRES,
";'>Hombres</b>"
),
x = "",
y = "",
caption = "@congosto\nFuente: INE") +
guides(color = "none") + # Quitamos la leyenda
mi_tema() +
theme(plot.title = element_markdown())
Se podrĆa dejar en la fase 5, pero obviando la regla de la poca tinta, se le puede aƱadir contexto sobre quiĆ©n gobernaba en cada periodo.
Se construye un tibble con los datos de cada legislatura: legislatura, fecha de inicio, fecha de fin, presidente, partido del presidente.
Para que no quede muy sobrecargado, en vez de anotar en cada periodo el presidente, solo se anotarĆ” cuando es nuevo presidente entrante.
legislaturas <- c("VII", "VIII", "IX", "X", "XI", "XII", "XII", "XIII", "XIV")
inicio <-c("2002-01-01", "2004-04-18", "2008-04-18", "2011-12-20", "2015-12-20", "2016-07-19", "2018-06-07", "2019-04-18", "2020-01-28")
fin <-c("2004-04-18", "2008-04-18", "2011-12-20", "2015-12-20", "2016-07-19", "2018-06-07", "2019-04-18", "2020-01-28" , "2023-10-17")
presidentes <- c("Aznar", "Zapatero", "Zapatero", "Rajoy", "Rajoy", "Rajoy", "SƔnchez", "SƔnchez", "SƔnchez")
partidos <- c("PP", "PSOE", "PSOE", "PP", "PP", "PP", "PSOE", "PSOE", "PSOE")
gobierno <- tibble(
"legislatura" = legislaturas,
"inicio" = inicio,
"fin" = fin,
"presidente" = presidentes,
"partido" = partidos
)
# AƱadir los cambios de presidente
gobierno <- gobierno %>%
mutate(nuevo_presidente = presidente) %>%
mutate(nuevo_presidente = ifelse(lag (presidente ) != presidente, presidente, "")) %>%
mutate(nuevo_presidente = ifelse(is.na(nuevo_presidente), presidente, nuevo_presidente))
print(gobierno)
## # A tibble: 9 Ć 6
## legislatura inicio fin presidente partido nuevo_presidente
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 VII 2002-01-01 2004-04-18 Aznar PP "Aznar"
## 2 VIII 2004-04-18 2008-04-18 Zapatero PSOE "Zapatero"
## 3 IX 2008-04-18 2011-12-20 Zapatero PSOE ""
## 4 X 2011-12-20 2015-12-20 Rajoy PP "Rajoy"
## 5 XI 2015-12-20 2016-07-19 Rajoy PP ""
## 6 XII 2016-07-19 2018-06-07 Rajoy PP ""
## 7 XII 2018-06-07 2019-04-18 SƔnchez PSOE "SƔnchez"
## 8 XIII 2019-04-18 2020-01-28 SƔnchez PSOE ""
## 9 XIV 2020-01-28 2023-10-17 SƔnchez PSOE ""
Este contexto se añade cambiando el fondo del color de la grÔfica con geom_rect, según el color del partido gobernante en cada periodo. Para distinguir presidencias contiguas en periodos, se pinta de blanco los bordes de distintos bloques.
Se anotan los nombres de los presidentes, cuando hay cambios de presidencia.
Las leyendas se integran en el tĆtulo mediante color.
color_sexo <- c(Hombres = COLOR_HOMBRES, Mujeres = COLOR_MUJERES) # Color para sexo
color_partidos <- c(PP = COLOR_PP, PSOE = COLOR_PSOE) # Color para partidos
# Seleccionar de la serie el mƔs antiguo, el mƔs alto y el mƔs reciente
ggplot()+
geom_rect(
data = gobierno,
aes(
xmin = as.Date(inicio),
xmax = as.Date(fin),
ymin = 0,
ymax = Inf,
fill = partido),
color = "white",
alpha = .2
) +
geom_text(
data = gobierno,
aes(
x = as.Date(inicio) + (365 * 0.3),
y = 3,
label = nuevo_presidente,
),
hjust = 0,
color = COLOR_TEXTO
) +
geom_step(data = paro_sexo, aes(x = fecha, y = Total, color=Sexo)) +
# Dibujar la media de EspaƱa mƔs reciente
geom_line(
data = paro_media,
aes(x = fecha, y = Total),
color = COLOR_MEDIA,
linewidth = 2,
alpha = 0.3) +
# Anotar valores de la serie paro_sexo
geom_text_repel(
data = anotacion_paro_sexo,
aes(
x = fecha,
y = Total,
label = paste0(round(Total, 1), "% ", texto),
color = Sexo
),
size = 3,
direction = "y",
nudge_x = anotacion_paro_sexo$alineación_x,
nudge_y = 1
) +
# Anotar valores de la media
geom_text_repel(
data = anotacion_paro_media,
aes(
x = fecha,
y = Total,
label = paste0(round(Total, 1), "% ",texto)
),
size = 3,
color= COLOR_TEXTO,
direction = "y",
nudge_x = anotacion_paro_media$alineación_x,
nudge_y = 1
) +
scale_y_continuous(
labels = scales::percent_format(scale = 1, accuracy = 1L),
expand= c(0,0),
limits = c(0, max_paro * 1.1)) + # Se sube la altura para que quepa la anotación
scale_x_date(
limits = c(min_fecha - 365, max_fecha + (365 * 5)), # Ensanchamos eje x
breaks = fechas_visibles,
labels = date_format("%Y")
) +
scale_color_manual(values = color_sexo) +
scale_fill_manual(values = color_partidos) +
labs(
title = paste(
"Evolución de la tasa del paro por trimestres de<br><b style='color:",
COLOR_MUJERES,
";'>Mujeres</b> y <b style='color:",
COLOR_HOMBRES,
";'>Hombres</b>, segĆŗn el partido del gobierno <b style='color:",
COLOR_PP,
";'>PP</b> o <b style='color:",
COLOR_PSOE,
";'>PSOE</b>"
),
x = "",
y = "",
caption = "@congosto\nFuente: INE") +
guides(color = "none") + # Quitamos la leyenda de hombres-mujeres
guides(fill = "none") + # Quitamos la leyenda de pp-psoe
mi_tema() +
theme(plot.title = element_markdown())
Evolución de un boxplot usando etiquetado
Fondo para definir cuando se estaba en zona de riesgo en el covid-19.
GrĆ”fico realizado por el Grupo de Investigación en BiologĆa Computacional y Sistemas Complejos del Departamento de FĆsica de UPC.