
Los histogramas animados que se pueden incorporar directamente en publicaciones en cualquier sitio web son cada vez más populares. Muestran la dinámica de los cambios en cualquier característica durante un período determinado y lo hacen de manera visual. Veamos cómo crearlos utilizando R y paquetes universales.
Skillbox recomienda: Curso práctico .
Recordamos: para todos los lectores de «Habr» — un descuento de 10,000 rublos al registrarse en cualquier curso de Skillbox usando el código promocional «Habr».
Paquetes
Necesitamos los paquetes en R:
- ggplot2
Estos dos son absolutamente necesarios. Además, se requieren tidyverse, janitor y scales para la gestión de datos, limpieza del conjunto y formateo respectivamente.
Datos
El conjunto de datos original que vamos a utilizar en este proyecto se descarga del sitio del Banco Mundial. Aquí están: . Los mismos datos, si los necesitas en un formato listo, se pueden descargar de la .
¿Qué información contiene? La muestra incluye el PIB de la mayoría de los países durante varios años (desde 2000 hasta 2017).
Procesamiento de datos
Utilizaremos el código que se muestra a continuación para preparar el formato de datos necesario. Limpiamos los nombres de las columnas, convertimos los números a formato numérico y transformamos los datos utilizando la función gather(). Todo lo obtenido se guarda en gdp_tidy.csv para su uso posterior.
biblioteca(tidyverse)
biblioteca(janitor)
gdp <- read_csv(".\/data\/GDP_Data.csv")
#select required columns
gdp % select(3:15)
#filter only country rows
gdp <- gdp[1:217,]
gdp_tidy %
mutate_at(vars(contains("YR")),as.numeric) %>%
gather(year,value,3:13) %>%
janitor::clean_names() %>%
mutate(year = as.numeric(stringr::str_sub(year,1,4)))
write_csv(gdp_tidy,".\/data\/gdp_tidy.csv")
Histogramas animados
Su creación requiere dos etapas:
- Construcción de un conjunto completo de histogramas relevantes utilizando ggplot2.
- Animación de histogramas estáticos con los parámetros deseados mediante gganimate.
El último paso es renderizar la animación en el formato deseado, incluyendo GIF o MP4.
Cargar bibliotecas
- biblioteca(tidyverse)
- library(gganimate)
Gestión de datos
En este paso, se deben filtrar los datos para obtener los 10 principales países de cada año. Agregaremos algunas columnas que permitirán mostrar la leyenda para el histograma.
gdp_tidy <- read_csv(".\/data\/gdp_tidy.csv")
gdp_formatted %
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank %
ungroup()
Construcción de histogramas estáticos
Ahora que tenemos un paquete de datos en el formato adecuado, comenzamos a dibujar histogramas estáticos. La información básica es los 10 principales países con el PIB más alto durante el intervalo de tiempo seleccionado. Crearemos gráficos para cada año.
staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2, 2, 4, "cm"))
Crear gráficos utilizando ggplot2 es bastante simple. Como pueden ver en el fragmento de código anterior, hay varios puntos clave con la función theme(). Son necesarios para que todos los elementos se animen sin problemas. Algunos de ellos se pueden ocultar si es necesario. Ejemplo: se dibujan solo las líneas verticales de la cuadrícula y las leyendas, mientras que los títulos de los ejes y varios otros componentes se eliminan del gráfico.
Animación
La función clave aquí es transition_states(), que une gráficos estáticos individuales. view_follow() se utiliza para dibujar las líneas de la cuadrícula.
anim = staticplot + transition_states(año, transition_length = 4, state_length = 1) +
view_follow(fixed_x = VERDADERO) +
labs(title = 'PIB por Año : {closest_state}',
subtitle = "Las 10 Principales Países",
caption = "PIB en Miles de Millones USD | Fuente de Datos: Datos del Banco Mundial")
Renderizado
Después de que se ha creado la animación y se ha guardado en el objeto anim, es hora de visualizarla usando la función animate(). El renderizador utilizado en animate() puede variar dependiendo del tipo de archivo de salida requerido.
GIF
# For GIF
animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))
MP4
# For MP4
animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = ffmpeg_renderer()) -> for_mp4
anim_save("animation.mp4", animation = for_mp4 )
Resultado

Como vemos, no hay nada complicado. Todo el proyecto está disponible en , pueden usarlo como consideren necesario.
Skillbox recomienda:
- Curso práctico de dos años .
- Curso en línea .
- Curso práctico de un año .
Fuente: habr.com
