Last active
March 2, 2026 17:05
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| 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