Como criar animações no R usando o pacote gganimate?
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.
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.
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.
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.
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.
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
Boa tarde Mário,
Você esta usando nossos dados? Talvez esse erro se dê por causa do formato dos seus dados, confira mais aqui: https://stackoverflow.com/questions/59811513/ggplot2-error-message-error-in-seq-defaultrange1-range2-length-out-nfr
Qualquer coisa, pode nos dar mais informações?
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
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)
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?
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.
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.
Bom dia Antony,
Para exportar usando anim_save, você deve salvar o gráfico numa variável e depois usar o seguinte: anim_save(“C:/Users/Micro/Documents/nomeArquivo.gif”, variavel_Com_Grafico). Há outras formas que podem ser vistas neste link: https://stackoverflow.com/questions/51440496/using-gganimate-to-export-gif