Ao final desta aula, o aluno será capaz de:
ggplot2
e highcharter
.plotly
para transformar gráficos
estáticos do ggplot2
em visualizações interativas.Nesta aula, exploraremos o poder da visualização de dados para a
análise macroeconômica. Utilizaremos o ggplot2
, um dos
pacotes mais populares e versáteis para criação de gráficos em R,
baseado na “Gramática dos Gráficos”. Em seguida, elevaremos nossas
análises a um novo patamar com o plotly
, que nos permite
criar gráficos interativos com apenas uma linha de código adicional.
Primeiramente, vamos instalar (caso não tenha) e carregar os pacotes
que utilizaremos. O ggplot2
para os gráficos estáticos, o
plotly
para a interatividade e o dplyr
para
manipulação de dados.
# Se os pacotes não estiverem instalados, execute os comandos abaixo:
# install.packages("ggplot2")
# install.packages("plotly")
# install.packages("dplyr")
# install.packages("tidyr")
# install.packages("lubridate")
# install.packages("highcharter")
# install.packages("quantmod")
# install.packages("scales")
# Carregar os pacotes na sessão
library(ggplot2)
library(plotly)
library(dplyr)
library(tidyr)
library(lubridate)
library(highcharter)
library(quantmod)
library(scales)
economics
Para nossos exemplos, utilizaremos o conjunto de dados
economics
, que está convenientemente incluído no pacote
ggplot2
. Ele contém séries temporais mensais da economia
dos EUA. Vamos inspecionar suas primeiras linhas e estrutura.
# Carregar o dataset 'economics'
data("economics")
# Visualizar as primeiras linhas do dataset
head(economics)
## # A tibble: 6 × 6
## date pce pop psavert uempmed unemploy
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1967-07-01 507. 198712 12.6 4.5 2944
## 2 1967-08-01 510. 198911 12.6 4.7 2945
## 3 1967-09-01 516. 199113 11.9 4.6 2958
## 4 1967-10-01 512. 199311 12.9 4.9 3143
## 5 1967-11-01 517. 199498 12.8 4.7 3066
## 6 1967-12-01 525. 199657 11.8 4.8 3018
## spc_tbl_ [574 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ date : Date[1:574], format: "1967-07-01" "1967-08-01" ...
## $ pce : num [1:574] 507 510 516 512 517 ...
## $ pop : num [1:574] 198712 198911 199113 199311 199498 ...
## $ psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
## $ uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
## $ unemploy: num [1:574] 2944 2945 2958 3143 3066 ...
As variáveis principais são:
date
: Data da observação.pce
: Despesas de consumo pessoal (em bilhões de
dólares).pop
: População total (em milhares).psavert
: Taxa de poupança pessoal.uempmed
: Duração mediana do desemprego (em
semanas).http://127.0.0.1:9989/graphics/6f9ca73b-260e-46ce-98fd-8d9ef407c9a9.pngunemploy
: Número de desempregados (em milhares).ggplot2
A sintaxe do ggplot2
é construída em camadas. A base é a
função ggplot()
, onde especificamos o data
e o
aes
(estética), que mapeia variáveis aos eixos (x, y),
cores, tamanhos, etc. Em seguida, adicionamos “geoms”
(geom_...
), que definem o tipo de gráfico.
O gráfico de linha é fundamental para a macroeconomia, permitindo-nos
visualizar a evolução de variáveis ao longo do tempo. Vamos plotar o
número de desempregados (unemploy
) ao longo dos anos.
ggplot2
# Criar o gráfico de linha estático
g_linha <- ggplot(data = economics, mapping = aes(x = date, y = unemploy)) +
geom_line(color = "darkblue") + # Adiciona a camada de linha
labs( title = "Número de Desempregados nos EUA (1967-2015)",
subtitle = "Dados mensais",
x = "Ano",
y = "Número de Desempregados (em milhares)",
caption = "Fonte: Pacote 'ggplot2' (dataset 'economics')" ) +
theme_minimal() # Aplica um tema visual limpo
# Exibir o gráfico estático
print(g_linha)
Explicação do Código:
ggplot(data = economics, aes(x = date, y = unemploy))
:
Inicia o gráfico, define o dataset e mapeia a data para o eixo X e o
número de desempregados para o eixo Y.geom_line()
: Adiciona a camada que desenha a linha
conectando os pontos de dados.labs()
: Personaliza os rótulos do gráfico (título,
eixos, etc.).theme_minimal()
: Aplica um tema estético para um visual
mais limpo.plotly
Agora, com uma única função, ggplotly()
, transformamos
nosso gráfico estático em uma ferramenta de exploração interativa.
Análise Interativa: Passe o mouse sobre a linha para ver os valores exatos de cada ponto no tempo. Você também pode usar as ferramentas no canto superior direito para dar zoom em períodos específicos, o que é extremamente útil para analisar recessões ou períodos de expansão.
Gráficos de dispersão são excelentes para investigar a relação entre
duas variáveis quantitativas. Vamos explorar a relação entre a população
(pop
) e as despesas de consumo pessoal
(pce
).
ggplot2
g_dispersao <- ggplot(data = economics, aes(x = pop, y = pce)) +
geom_point(
aes(
color = psavert,
text = paste0(
"<b>População:</b> ",
number(pop, big.mark = ".", decimal.mark = ",", accuracy = 1), " mil<br>",
"<b>PCE:</b> ",
number(pce, big.mark = ".", decimal.mark = ",", accuracy = 0.01), " bi USD<br>",
"<b>Taxa de poupança:</b> ",
number(psavert, big.mark = ".", decimal.mark = ",", accuracy = 0.1), " %"
)
),
alpha = 0.6
) +
geom_smooth(method = "lm", color = "red", se = FALSE) +
scale_color_gradient(low = "#FEB712", high = "#02023C") +
labs(
title = "Relação entre População e Consumo nos EUA",
x = "População (em milhares)",
y = "Despesas de Consumo Pessoal (em bilhões de USD)",
color = "Taxa de Poupança (%)",
caption = "Fonte: Pacote 'ggplot2' (dataset 'economics')"
) +
theme_bw()
# Exibir o gráfico estático
print(g_dispersao)
Explicação do Código:
geom_point(aes(color = psavert), alpha = 0.6)
: Adiciona
a camada de pontos. Mapeamos a cor dos pontos à variável
psavert
(taxa de poupança) e aplicamos transparência
(alpha
) para melhor visualização de pontos
sobrepostos.geom_smooth(method = "lm", ...)
: Adiciona uma camada
com uma linha de ajuste (regressão linear, lm
).
se = FALSE
remove a banda de erro padrão.scale_color_gradient(...)
: Controla o gradiente de
cores usado para a taxa de poupança.plotly
Análise Interativa: Ao passar o mouse, você pode ver simultaneamente os valores da população, do consumo e da taxa de poupança para cada ponto de dados (mês). Isso enriquece a análise da relação entre as variáveis.
Gráficos de barras são úteis para comparar valores entre diferentes grupos ou categorias. Como nossos dados são séries temporais, podemos criar categorias, como “décadas”, para comparar uma métrica. Vamos comparar a duração mediana do desemprego por década.
Primeiro, precisamos criar uma variável decada
em nosso
dataframe.
# Usando dplyr para criar a variável 'década'
economics_decadas <- economics %>%
mutate(decada = factor(floor(year(date) / 10) * 10)) %>% # Agrupa anos em décadas
group_by(decada) %>% # Agrupa por década
summarise(uempmed_media = mean(uempmed, na.rm = TRUE)) # Calcula a média da duração do desemprego
# Visualizar o resultado
head(economics_decadas)
## # A tibble: 6 × 2
## decada uempmed_media
## <fct> <dbl>
## 1 1960 4.52
## 2 1970 6.29
## 3 1980 7.2
## 4 1990 7.58
## 5 2000 9.26
## 6 2010 18.2
ggplot2
# Criar o gráfico de barras estático
g_barras <- ggplot(data = economics_decadas, aes(x = decada, y = uempmed_media)) +
geom_col(
aes(
fill = uempmed_media,
text = paste0(
"<b>Década:</b> ", decada,
"<br><b>Duração mediana:</b> ",
number(uempmed_media, accuracy = 0.1, decimal.mark = ","),
" semanas"
)
),
show.legend = FALSE
) +
scale_fill_gradient(low = "#FEB712", high = "#02023C") +
labs(
title = "Duração Mediana do Desemprego por Década nos EUA",
x = "Década",
y = "Duração Média (em semanas)",
caption = "Fonte: Pacote 'ggplot2' (dataset 'economics')"
) +
theme_light()
# Exibir o gráfico estático
print(g_barras)
Explicação do Código:
mutate()
e
group_by()
/summarise()
: Funções do
dplyr
para criar a variável decada
e calcular
a estatística agregada.geom_col()
: Cria as barras com alturas definidas pela
variável uempmed_media
.Agora, utilizaremos um novo conjunto de ferramentas e dados. O
highcharter
será nosso motor de visualização, e o
quantmod
nos permitirá buscar dados macroeconômicos
atualizados diretamente do Federal Reserve Economic Data (FRED).
Com o quantmod
, podemos baixar séries de dados
diretamente do FRED. Vamos buscar três indicadores chave da economia dos
EUA:
GDP
: Produto Interno Bruto (trimestral)CPIAUCSL
: Índice de Preços ao Consumidor (inflação,
mensal)UNRATE
: Taxa de Desemprego (mensal)O quantmod
baixa os dados como objetos xts
(eXtensible Time Series), que são ótimos para modelagem, mas vamos
convertê-los para um data.frame
para facilitar a
manipulação com dplyr
e o uso no
highcharter
.
# Definir os códigos das séries no FRED
fred_series <- c("GDP", "CPIAUCSL", "UNRATE")
# Baixar os dados a partir de 2000-01-01
getSymbols(fred_series, src = "FRED", from = "2000-01-01")
## [1] "GDP" "CPIAUCSL" "UNRATE"
# Converter os objetos xts para um data.frame único e organizado
macro_data <- data.frame(
date = index(UNRATE),
# CORREÇÃO: Usar as.numeric() para remover nomes de colunas da matriz xts
unemployment = as.numeric(coredata(UNRATE))
) %>%
# Juntar os dados de inflação (também mensais)
left_join(
data.frame(date = index(CPIAUCSL),
# CORREÇÃO: Usar as.numeric()
inflation_cpi = as.numeric(coredata(CPIAUCSL))),
by = "date"
) %>%
# Juntar os dados do PIB (trimestrais, o join vai repetir os valores)
left_join(
data.frame(date = index(GDP),
# CORREÇÃO: Usar as.numeric()
gdp = as.numeric(coredata(GDP))),
by = "date"
) %>%
# A função fill agora encontrará a coluna 'gdp' corretamente
fill(gdp, .direction = "down") %>%
# Remover quaisquer linhas com NA restantes (geralmente no início)
na.omit()
# Inspecionar o resultado
head(macro_data)
## date unemployment inflation_cpi gdp
## 1 2000-01-01 4.0 169.3 10002.18
## 2 2000-02-01 4.1 170.0 10002.18
## 3 2000-03-01 4.0 171.0 10002.18
## 4 2000-04-01 3.8 170.9 10247.72
## 5 2000-05-01 4.0 171.2 10247.72
## 6 2000-06-01 4.0 172.2 10247.72
## date unemployment inflation_cpi gdp
## 303 2025-03-01 4.2 319.615 29962.05
## 304 2025-04-01 4.2 320.321 30353.90
## 305 2025-05-01 4.2 320.580 30353.90
## 306 2025-06-01 4.1 321.500 30353.90
## 307 2025-07-01 4.2 322.132 30353.90
## 308 2025-08-01 4.3 323.364 30353.90
highchart(type = "stock")
Este é o tipo de gráfico mais poderoso do highcharter
para análise de séries temporais. Ele vem com funcionalidades nativas
como seletor de intervalo de datas, navegador de série, zoom e tooltips
detalhados.
Vamos visualizar o PIB e a Taxa de Desemprego no mesmo gráfico. Como as escalas são muito diferentes (trilhões de dólares para o PIB e porcentagem para o desemprego), usaremos dois eixos Y.
highchart(type = "stock") %>%
# Adiciona a série do PIB
hc_add_series(
data = macro_data,
type = "line",
hcaes(x = date, y = gdp),
name = "PIB (US$ Bilhões)",
yAxis = 0 # Define que esta série usará o primeiro eixo Y (índice 0)
) %>%
# Adiciona a série da Taxa de Desemprego
hc_add_series(
data = macro_data,
type = "line",
hcaes(x = date, y = unemployment),
name = "Desemprego (%)",
yAxis = 1 # Define que esta série usará o segundo eixo Y (índice 1)
) %>%
# Configuração dos múltiplos eixos Y
hc_yAxis_multiples(
# Configuração do primeiro eixo (PIB)
list(
title = list(text = "PIB (US$ Bilhões)"),
opposite = FALSE # Posiciona o eixo à esquerda
),
# Configuração do segundo eixo (Desemprego)
list(
title = list(text = "Taxa de Desemprego (%)"),
opposite = TRUE # Posiciona o eixo à direita
)
) %>%
# Adiciona títulos e créditos
hc_title(text = "Desempenho Macroeconômico dos EUA") %>%
hc_subtitle(text = "PIB vs. Taxa de Desemprego") %>%
hc_credits(enabled = TRUE, text = "Fonte: Federal Reserve Economic Data (FRED)") %>%
# Configura o tooltip para mostrar informações de ambas as séries
hc_tooltip(shared = TRUE, crosshairs = TRUE)
highcharter
Podemos investigar a relação entre inflação e desemprego (uma versão simplificada da Curva de Phillips). Primeiro, vamos calcular a variação anual da inflação.
# Calcular a variação anual do CPI (Inflação)
phillips_data <- macro_data %>%
mutate(
inflation_yoy = (inflation_cpi / lag(inflation_cpi, 12) - 1) * 100,
ano = year(date)
) %>%
filter(date >= "2001-01-01") %>% # Remove NAs do cálculo do lag
na.omit()
Agora, criamos o gráfico de dispersão interativo.
hchart(
phillips_data,
"scatter", # Tipo de gráfico
hcaes(x = unemployment, y = inflation_yoy, group = ano)
) %>%
hc_title(text = "Relação entre Desemprego e Inflação nos EUA (2001-Presente)") %>%
hc_xAxis(title = list(text = "Taxa de Desemprego (%)")) %>%
hc_yAxis(title = list(text = "Inflação Anual (%)")) %>%
hc_tooltip(
pointFormat = "<b>Ano: {point.ano}</b><br/>Desemprego: {point.x:.2f}%<br/>Inflação: {point.y:.2f}%"
)
Quando usar ggplot2
+ plotly
vs. highcharter
?
ggplot2
+ plotly
: É a combinação ideal
quando você precisa de total controle sobre a gramática dos gráficos
para construir visualizações complexas e personalizadas em camadas. É a
escolha padrão para publicações acadêmicas e análises exploratórias
detalhadas. A conversão para plotly
adiciona interatividade
a essa base sólida.
highcharter
: É a melhor escolha quando o objetivo é
produzir rapidamente gráficos de “qualidade de dashboard”, elegantes e
com funcionalidades interativas avançadas (como o
type = "stock"
). Sua sintaxe baseada em pipe é muito
fluida, e é excelente para relatórios executivos, aplicações web (Shiny)
e exploração rápida de séries temporais financeiras e econômicas.
Ambos os conjuntos de ferramentas são extremamente poderosos. A escolha dependerá do seu objetivo final e preferência de sintaxe.