Como criar animações no R usando o pacote gganimate?

Confira nosso curso online de QGIS

Aprenda a criar animações dentro do R para gerar gráficos de linha que mostram o comportamento dos seus dados ao longo do tempo. Faça tais animação usando o pacote gganimate e ggplot2.

A atmosfera é composta por diferentes gases, tais como Nitrogênio (78,08%), Oxigênio (20,95%), Argônio (0,93%), Vapor d’água (0 a 5%), Dióxido de Carbono (0,038% ou 380 ppm), entre outros compostos.

Junto com o metano, o dióxido de carbono (CO2) é um gás de efeito estufa. Tal efeito é o resultado da absorção de radiação de ondas longas emitidas pela Terra por estas e outras moléculas. Essa radiação é originada das radiações de ondas curtas, radiação solar, (que não são absorvidas por elas) e que ao serem refletidas pela Terra, tornam-se de ondas longas e são absorvidas na atmosfera.

Embora houvesse uma noção de que o CO2 contribuísse para este efeito, foi somente nos anos 1970 que essa questão começou a ser discutida com maior enfase. Foi também nesta época que as medições de CO2 atmosférico começaram a ser longas o suficiente para evidenciar uma tendência de aumento.

Esse aumento é atribuído à queima de combustíveis fósseis que é baseado nos seguintes fatos:

  • Análises de bolhas de gases presas em testemunhos de gelos da Groenlândia e da Antártida que indicam que o aumento de CO2 atmosférico começou na revolução industrial e tem acompanhado significativamente o consumo de combustíveis fósseis desde então;
  • A concentração de CO2 atmosférico é maior no hemisfério norte, onde há maior concentração de fontes de emissão;
  • A concentração de oxigênio atmosférico tem decrescido ao longo dos anos, contribuindo com a hipótese de que o CO2 adicionado é oriundo de processos de combustão;
  • Alteração nas relações entre os isótopos de carbono (Carbono-14 e Carbono-13).

Entre as atividades humanas que contribuem para a emissão de dióxido de carbono, temos o setor energético (especialmente em função da queima de carvão e gás natural).

Dessa forma, essas emissões são monitoradas para avaliar o grau de contribuição desse setor para as mudanças climáticas, indicando quais são as melhores estratégias e práticas para serem adotadas para reduzir a emissão deste poluente.

Um desses monitoramentos é realizado pelo grupo BP, a qual disponibiliza seus relatórios anualmente. Nesta postagem, iremos utilizar os dados disponibilizados em seu relatório de 2018 (CO2 emissions – 2017 in review) para criar animações de diferentes pais e seus níveis de emissões de CO2 anuais.

Criando Animações no R

Gráficos estáticos não costumam chamar tanta atenção quanto gráficos animados. Ver as linhas subindo e descendo deixa claro para qualquer leigo o comportamento do fenômeno ambiental que estamos avaliando.

Selecionamos dez países e digitalizamos seus dados numa tabela do excel e em seguida, salvamos ela em CSV. Os países selecionados são:

  • Brasil;
  • Argentina;
  • Chile;
  • Estados Unidos (EUA);
  • Canadá;
  • Alemanha;
  • Rússia;
  • China;
  • Japão;
  • Coreia do Sul.

Ao digitalizar seus dados, organize eles de forma que na primeira coluna você tenha o nome dos países, na segunda coluna, o ano do monitoramento e na terceira coluna, a concentração de CO2. O resultado dessa organização pode ser visualizado na imagem abaixo.

Organização dos dados na forma de colunas no Excel.
Organização dos dados na forma de colunas no Excel.

Agora, vamos aos códigos do R. O primeiro conjunto de códigos são utilizados para instalar e carregar os pacotes necessários para criar as animações. O primeiro deles é o ggplot2, que será utilizado para plotar os gráficos. O segundo é o gganimate, pacote que é responsável pela criação das animações e o ultimo é o gifski para exportar a animação como imagem gif.

install.packages("colorspace")
install.packages("ggplot2")
install.packages("gganimate")
install.packages("gifski")
library(colorspace)
library(ggplot2)
library(gganimate)
library(gifski)

Nesta sequência de códigos, utilizamos install.packages() para instalar os novos pacotes e a função library() para carregá-los. O pacote colorspace é apenas um complemento ao pacote ggplot2.

Após carregar os pacotes necessários, iremos carregar nossa tabela que encontra-se no formato CSV. Para este procedimento, usaremos a função read.csv().

co2 <- read.csv("C:/Users/ferna/Desktop/co2.csv", header = TRUE)

Lembre-se de substituir o primeiro parâmetro pelo caminho onde encontra-se seu arquivo.

Após carregar nossa planilha, vamos utilizar a função ggplot para gerar nosso gráfico de linha mostrando a evolução das emissões de CO2 por países. A lista abaixo explica cada uma das linhas que utilizaremos, acompanhe:

  • ggplot(): Função principal do ggplot, é utilizada para indicar onde esta os dados, quem é a variável dependente e independente e como os dados serão agrupados;
  • geom_line(): Conecta os pontos fornecidos, ordenando os dados no eixo x;
  • geom_segment(): Desenha as linhas para conectar os pontos e possibilita a sua edição;
  • geom_point(): Função utilizada para criar gráficos de dispersão;
  • geom_text(): Cria textos no gráfico e possibilita indicar a localização deste;
  • transition_reveal(): Função do pacote gganimate que permite que os dados apareçam gradualmente no gráfico (ele calcula valores intermediários aos fornecidos para a animação);
  • coord_cartesian(): Permite manipular o sistema de coordenadas do gráfico, dando zoom ou fazendo com que o gráfico fique no mesmo lugar;
  • labs(): Função para fornecer os rótulos do gráfico (tais como título, nome do eixo x e y);
  • scale_x_continuous(): Indica como os valores no eixo x irão aparecer (como eles serão repartidos);
  • theme(): Permite configurar o tamanho do gráfico, bem como outro parâmetros do tema adotado.

Agora que conhecemos um pouco das funções utilizadas, vejamos o código abaixo.

ggplot(co2, aes(Ano, CO2_MT, group = Pais)) +
  geom_line() +
  geom_segment(aes(xend = 2017, yend = CO2_MT), linetype =2, colour = "grey") +
  geom_point(size = 2) + 
  geom_text(aes(x = 2017, label = Pais), hjust = 0) + 
  transition_reveal(Ano) + 
  coord_cartesian(clip = 'off') + 
  labs(title = 'Emissão de CO2 no Setor Elétrico', y = 'CO2 (Mt)') +
  scale_x_continuous("Ano", labels = co2$Ano, breaks = co2$Ano)+
  #theme_minimal() + 
  theme(plot.margin = margin(5.5, 40, 5.5, 5.5), 
        axis.text.x = element_text(face = "plain", size = 8))

Após executar esse código, o R irá mostrar uma barra de carregamento e, se você estiver usando RStudio, uma animação irá aparecer na janela do visualizador (viewer). Para salvá-la, você deve clicar sobre ela com o botão direito e selecionar salvar imagem, sendo que ao salvar, não esqueça de colocar a extensão na imagem (isto é, .gif no final do nome do arquivo).

A animação gerada é apresentada abaixo.

Animação gerada utilizando gganimate para demonstrar emissões de CO2 por países.
Animação gerada utilizando gganimate para demonstrar emissões de CO2 por países.

Note que as emissões dos EUA e da China são mais elevadas que as dos outros países, por isso, vamos modificar um pouco nossos dados de entrada para separar esses países e gerarmos uma animação mais detalhada.

O código abaixo cria um data frame para os EUA e para China e separa os outros países em análise. Essa separação foi feita utilizando o pacote dplyr, o qual esta incluído no pacote “tidyverser”.

install.packages("tidyverse")
library(tidyverse)
co2_maior <- co2 %>% filter(co2$Pais %in% c("EUA","China"))
co2_maior$Pais <- droplevels(co2_maior$Pais)
co2_menor <- co2 %>% filter(!(co2$Pais %in% c("EUA", "China")))
co2_menor$Pais <- droplevels(co2_menor$Pais)

Foi utilizada a função filter() para filtrar e separar os dados em função dos países e em seguida a função droplevels para retirar os fatores que não são utilizados no data frame.

Agora, podemos repetir a função anterior que cria a animação considerando esses dois novos data frames.

ggplot(co2_maior, aes(Ano, CO2_MT, group = Pais)) +
  geom_line() +
  geom_segment(aes(xend = 2017, yend = CO2_MT), linetype =2, colour = "grey") +
  geom_point(size = 2) + 
  geom_text(aes(x = 2017, label = Pais), hjust = 0) + 
  transition_reveal(Ano) + 
  coord_cartesian(clip = 'off') + 
  labs(title = 'Emissão de CO2 no Setor Elétrico', y = 'CO2 (Mt)') +
  scale_x_continuous("Ano", labels = co2_maior$Ano, breaks = co2_maior$Ano) +
  theme(plot.margin = margin(5.5, 40, 5.5, 5.5), 
        axis.text.x = element_text(face = "plain", size = 8))

O resultado do código acima pode ser visualizado abaixo.

Gráfico animado mostrando as emissões de CO2 pelos EUA e China.
Gráfico animado mostrando as emissões de CO2 pelos EUA e China.

O mesmo procedimento pode ser adotada para obter a animação dos outros países, basta substituir a variável co2_maior pela variável co2_menor. Também modificamos o item plot.margin dentro de theme(), de forma que o nome da Coreia do Sul apareça por completo.

[...] theme(plot.margin = margin(5.5, 50, 5.5, 5.5) + [...]

O resultado pode ser visualizado abaixo.

Animação mostrando diferentes países e o quanto eles emitiram de CO2 em cada ano.
Animação mostrando diferentes países e o quanto eles emitiram de CO2 em cada ano.

Agora que você já sabe criar animações, pode ir modificando alguns parâmetros para modificar as cores, o tema e até mesmo utilizar seus próprios dados.

Gostou da publicação? Compartilhe ela nas suas redes sociais.

Fontes Consultadas.

BP. CO2 Emissions. Disponível em <https://www.bp.com/en/global/corporate/energy-economics/statistical-review-of-world-energy/co2-emissions.html>. Acesso em 26 jan. 2019.

EPA. Sources of Greenhouse Gas Emissions. Disponível em <https://www.epa.gov/ghgemissions/sources-greenhouse-gas-emissions>. Acesso em 26 jan. 2019.

gganimate wiki. Disponível em: <https://github.com/thomasp85/gganimate/wiki>. Acesso em 27 jan. 2019.

WALLACE, J.M.; HOBBS, P.V. Atmospheric Science - An Introductory Survery. 2 ed. Elsevier, 2006. 505 pg.


Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".

Apostila Mapa de Localização Banner

Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de geoprocessamento, mineração e hidrologia. Busca soluções utilizando softwares como QGIS, R e Python.

8 thoughts on “Como criar animações no R usando o pacote gganimate?”

  1. Oii….Tudo bem??
    Então, quando dou o comando para o gráfico do ggplot o mesmo não converge, está dando o seguinte erro:
    Error in seq.default(range[1], range[2], length.out = nframes) :
    ‘from’ must be a finite number
    In addition: Warning messages:
    1: In min(x) : no non-missing arguments to min; returning Inf
    2: In max(x) : no non-missing arguments to max; returning -Inf

      1. EU atualizei o R…e dai excecuitei tudo ate na hora de criar a ANIMAÇÃO AI APARECEU ISSO E NAO DEU CERTO:
        Error in seq.default(range[1], range[2], length.out = nframes) :
        ‘from’ must be a finite number
        Além disso: Warning messages:
        1: In min(x) : nenhum argumento não faltante para min; retornando Inf
        2: In max(x) : nenhum argumento não faltante para max; retornando -Inf

        1. Bom dia Thiara,

          Uma possível razão deste erro é que a tabela de entrada (co2 <- read.csv("C:/Users/ferna/Desktop/co2.csv", header = TRUE)) esta no formato incorreto, ela deve conter apenas 3 colunas, onde a primeira é o pais, segundo é o ano e terceiro é a quantidade de CO2. O gganimate precisa de tabelas no formato longo (long-format data frame), diferente da forma que costumamos montar as tabelas, que são no formato amplo (wide-format data frame). (https://stackoverflow.com/questions/59811513/ggplot2-error-message-error-in-seq-defaultrange1-range2-length-out-nfr)

  2. Oi tentei fazer e não deu certo, minha versão é a 3.6.1 e diz que nao da p baixar os seguintes pacotes
    ibrary(colorspace)
    Warning message:
    package ‘colorspace’ was built under R version 3.6.3
    > library(ggplot2)
    Warning message:
    package ‘ggplot2’ was built under R version 3.6.3
    > library(gganimate)
    Warning message:
    package ‘gganimate’ was built under R version 3.6.3
    > library(gifski)
    Warning message:
    package ‘gifski’ was built under R version 3.6.3
    Como faço?, tenho q atualizar minha versão?

    1. Bom dia Thiara,

      É sempre bom manter o R atualizado, mas as mensagens que você esta recebendo são apenas avisos, não sendo grande problema. Caso essas sejam as únicas mensagens de erro que você esta recebendo e o código ainda não esta funcionando, tente atualizar o R.

  3. Vc tem o código para salvar o gráfico no formato gif em uma pasta especifica no computador, e especificando a resolução e frames desejados?

    Por exemplo, o caminho que tenho aqui é esse, quero salvar na pasta documentos “C:/Users/Micro/Documents/”

    Como ficaria o código para salvar usando o anim_save e/ou usando a função animate () para salvar a saída.

    Desde já agradeço a atenção.

Deixe um comentário para Fernando BS Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *