Skip to content

Instantly share code, notes, and snippets.

@fernandobarbalho
Last active March 2, 2026 17:05
Show Gist options
  • Select an option

  • Save fernandobarbalho/67ea393b9976db47472747ef7d2bdf8d to your computer and use it in GitHub Desktop.

Select an option

Save fernandobarbalho/67ea393b9976db47472747ef7d2bdf8d to your computer and use it in GitHub Desktop.
Script para consumir dados de cotação do dolar e gerar gráfico com informações dinâmicas no título, subtítulo e caption
---
title: "Gráfico da cotação do dolar"
author: "Fernando Almeida Barbalho"
date: "2026-01-27"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE)
library(jsonlite)
library(tidyverse)
library(lubridate)
data_hoje<- Sys.Date()
data_ini_busca<- "01-01-2024"
data_anterior_us<- format(data_hoje-1, format = "%m-%d-%Y")
endereco<- paste0("https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarPeriodo(dataInicial=@dataInicial,dataFinalCotacao=@dataFinalCotacao)?@dataInicial='",data_ini_busca,"'&@dataFinalCotacao='",data_anterior_us,"'&$top=640&$format=json&$select=cotacaoCompra,cotacaoVenda,dataHoraCotacao")
#
cotacao_dolar<- jsonlite::read_json(endereco, simplifyVector = TRUE)
#
df_cotacao_dolar <- cotacao_dolar[["value"]]
cor_fundo<- "#D0D0D0"# "#F8F8F8"
cor_fundo_painel<- "#F5F5F5"
cor_fundo_estados<- "#696969"
cor_fundo_mapa_pontos <- "#2B2B2B" #"#505050"
cor_texto<- "#324e5a"
valor_hoje<- 5.1553
valor_compra_hoje<- 5.1783
elaboracao<- "Fernando Barbalho"
```
```{r fig.dpi= 300}
dados_grafico_cotacao_dolar<-
df_cotacao_dolar %>%
mutate(data_cotacao = as.Date(dataHoraCotacao)) %>%
select(-dataHoraCotacao) %>%
bind_rows(tibble(cotacaoCompra= valor_compra_hoje, cotacaoVenda=valor_hoje, data_cotacao = data_hoje)) %>%
pivot_longer(cols = c(cotacaoCompra, cotacaoVenda), names_to = "tipo_cotacao", names_prefix = "cotacao", values_to = "valor") %>%
filter(tipo_cotacao == "Venda")
df_marco_anterior_data<-
dados_grafico_cotacao_dolar %>%
filter(valor<=valor_hoje,
data_cotacao != data_hoje) %>%
arrange(desc(data_cotacao)) %>%
slice_head(n=1)
df_marco_anterior<-
dados_grafico_cotacao_dolar %>%
filter(data_cotacao == df_marco_anterior_data$data_cotacao)
intervalo <- interval(df_marco_anterior$data_cotacao, data_hoje )
n_meses <- time_length(intervalo, "month")
n_meses <- floor(n_meses)
dados_sel<-
dados_grafico_cotacao_dolar %>%
filter(data_cotacao %in% c(df_marco_anterior$data_cotacao,data_hoje))
dados_grafico_cotacao_dolar %>%
ggplot(aes(x=data_cotacao, y= valor )) +
geom_line(size = 1, color = "#4F7942") +
geom_hline(yintercept = valor_hoje, color= "#1F6AE1", linetype= "dashed", size = 1) +
#geom_point( pch=21, fill= "black", color = cor_fundo_painel, size = 2 ) +
geom_point(data= dados_sel, pch=21, fill= "#E00613", color = cor_fundo_painel, size = 3 ) +
scale_x_date(breaks = c(df_marco_anterior$data_cotacao,data_hoje), labels = scales::date_format(format = "%d/%m/%Y")) +
scale_y_continuous(breaks = valor_hoje, labels = scales::number_format(accuracy = 0.0001, prefix = "R$ ", decimal.mark = ",")) +
theme_light() +
theme(
panel.background = element_rect(fill=cor_fundo_painel),
panel.grid = element_blank(),
legend.position = "right",
legend.background = element_rect(fill= cor_fundo, color = cor_fundo),
plot.background = element_rect(fill =cor_fundo ),
plot.title = element_text(size = 14, face = "bold"),
plot.subtitle = element_text(size = 12, face = "italic"),
text = element_text( colour = cor_texto),
strip.text = element_text(size= 8, face ="bold"),
axis.title = element_blank(),
axis.text.y = element_text(color = "#1F6AE1", face = "bold")
) +
labs(
title = paste0("Dólar recua a ", scales::number (x= valor_hoje, accuracy = 0.0001, prefix = "R$ ", decimal.mark = ",")," menor valor em mais de ", n_meses," meses") ,
subtitle = paste0("Última vez abaixo desse patamar foi em ", format(df_marco_anterior$data_cotacao, "%d/%m/%Y"), " (", scales::number(df_marco_anterior$valor, prefix = "R$", accuracy = 0.0001, decimal.mark=","), ")") ,
caption = paste0("Fonte: BACEN (PTAX fechamento até ",format(data_hoje-1,"%d/%m/%Y" ),") e Valor Econômico (", format(data_hoje, "%d/%m/%Y"), "). Elaboração: ", elaboracao)
)
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment