
Os histogramas animados que você pode incorporar diretamente em uma publicação em qualquer site estão se tornando cada vez mais populares. Eles exibem a dinâmica das mudanças em qualquer característica por um certo tempo e o fazem claramente. Vamos ver como criá-los usando pacotes R e universais.
A Skillbox recomenda: O desenvolvedor Python desde o início do curso prático .
Lembramos que: para todos os leitores de "Habr" - um desconto de 10.000 rublos ao se inscrever em qualquer curso Skillbox usando o código promocional "Habr".
Pacotes
Precisamos de pacotes no R:
Esses dois são essenciais. Além disso, são necessários tidyverse, zelador e escalas para gerenciar dados, limpar a matriz e o formato, respectivamente.
Dados
O conjunto de dados original que usaremos neste projeto é baixado do site do Banco Mundial. Aqui estão eles -
dados do WorldBank . Os mesmos dados, se você precisar deles no formato final, podem ser baixados da
pasta do
projeto .
O que é essa informação? A amostra contém o PIB da maioria dos países ao longo de vários anos (de 2000 a 2017).
Processamento de dados
Usaremos o código abaixo para preparar o formato de dados necessário. Limpamos os nomes das colunas, transformamos os números em um formato numérico e convertemos os dados usando a função gather (). Tudo o que é recebido é armazenado em gdp_tidy.csv para uso futuro.
library(tidyverse) library(janitor) gdp <- read_csv("./data/GDP_Data.csv") #select required columns gdp <- gdp %>% select(3:15) #filter only country rows gdp <- gdp[1:217,] gdp_tidy <- gdp %>% 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")
Gráficos de barras animados
Sua criação requer dois estágios:
- Construindo um conjunto completo de histogramas relevantes usando o ggplot2.
- Animação de histogramas estáticos com os parâmetros desejados usando o gganimate.
A etapa final é renderizar a animação no formato desejado, incluindo GIF ou MP4.
Carregando bibliotecas
- biblioteca (arrumado)
- biblioteca (gganimate)
Gerenciamento de dados
Nesta etapa, você precisa filtrar os dados para obter os 10 principais países de cada ano. Adicione algumas colunas que permitem exibir a legenda do histograma.
gdp_tidy <- read_csv("./data/gdp_tidy.csv") gdp_formatted <- gdp_tidy %>% 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 <=10) %>% ungroup()
Criando histogramas estáticos
Agora que temos o pacote de dados no formato desejado, começamos a desenhar os histogramas estáticos. Informações básicas - os 10 principais países com PIB máximo para o intervalo de tempo selecionado. Criamos gráficos para cada ano.
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"))
Construir gráficos usando o ggplot2 é bastante simples. Como você pode ver na seção de código acima, existem alguns pontos-chave com a função theme (). Eles são necessários para que todos os elementos sejam animados sem problemas. Alguns deles podem não ser exibidos, se necessário. Exemplo: apenas linhas de grade verticais e legendas são desenhadas, mas os títulos dos eixos e mais alguns componentes são removidos do local.
Animação
A função principal aqui é transit_states (), que cola gráficos estáticos separados. view_follow () é usado para desenhar linhas de grade.
anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) + view_follow(fixed_x = TRUE) + labs(title = 'GDP per Year : {closest_state}', subtitle = "Top 10 Countries", caption = "GDP in Billions USD | Data Source: World Bank Data")
Renderização
Depois que a animação é criada e salva no objeto anim, é hora de visualizá-la usando a função animate (). O renderizador usado em animate () pode variar dependendo do tipo de arquivo de saída necessário.
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 você pode ver, nada complicado. Todo o projeto está disponível no
meu GitHub , você pode usá-lo como achar melhor.
A Skillbox recomenda: