Introdução às Pirâmides Demográficas
Uma pirâmide demográfica é uma representação gráfica da distribuição etária e de gênero de uma população. Tipicamente mostra a população em barras horizontais, com homens representados à esquerda e mulheres à direita. Cada barra representa um grupo etário específico, e o comprimento da barra indica o número de pessoas naquele grupo.
As pirâmides demográficas são amplamente utilizadas em análises demográficas para visualizar a estrutura de uma população, fornecendo insights valiosos sobre tendências como crescimento populacional, envelhecimento e distribuição de gênero.
Essas pirâmides são cruciais para entender as dinâmicas socioeconômicas de um país, pois destacam as proporções de populações jovens versus idosas e revelam padrões relacionados a taxas de fertilidade, expectativa de vida e migração.
Ao analisar pirâmides demográficas, formuladores de políticas, empresas e pesquisadores podem tomar decisões informadas relacionadas à saúde, educação e planejamento da força de trabalho.
Pacotes Necessários
Criação de Dados Exemplo
Como dados demográficos podem ser sensíveis ao acesso, criaremos dados amostrais realistas que demonstram os conceitos principais da criação de pirâmides demográficas:
# Criar dados demográficos amostrais para estrutura populacional tipo Brasil
set.seed(42)
create_demo_data <- function(country, year, pattern = "young") {
# Grupos etários
age_groups <- c("0-4", "5-9", "10-14", "15-19", "20-24", "25-29", "30-34",
"35-39", "40-44", "45-49", "50-54", "55-59", "60-64",
"65-69", "70-74", "75-79", "80-84", "85+")
# Criar diferentes padrões populacionais
if (pattern == "young") {
# População jovem - país em desenvolvimento típico
base_pop <- c(8.5, 8.2, 7.8, 7.5, 7.0, 6.8, 6.5, 6.2, 5.8, 5.5,
5.0, 4.5, 4.0, 3.5, 2.8, 2.0, 1.2, 0.7)
} else if (pattern == "aging") {
# População envelhecida - país desenvolvido
base_pop <- c(4.5, 4.8, 5.2, 5.5, 5.8, 6.2, 6.8, 7.2, 7.5, 7.0,
6.5, 6.2, 5.8, 5.5, 5.0, 4.2, 3.0, 1.8)
} else {
# População balanceada
base_pop <- c(6.5, 6.2, 6.0, 6.5, 7.0, 7.2, 7.0, 6.8, 6.5, 6.0,
5.5, 5.0, 4.5, 4.0, 3.5, 2.5, 1.5, 0.8)
}
# Adicionar variação aleatória
male_pop <- base_pop + rnorm(length(base_pop), 0, 0.2)
female_pop <- base_pop + rnorm(length(base_pop), 0, 0.2)
# Garantir valores positivos
male_pop <- pmax(male_pop, 0.1)
female_pop <- pmax(female_pop, 0.1)
# Criar data frame
data.frame(
country = country,
year = year,
age_group = rep(age_groups, 2),
sex = rep(c("Male", "Female"), each = length(age_groups)),
population = c(male_pop, female_pop)
)
}
# Criar dados amostrais para diferentes países e anos
brazil_1990 <- create_demo_data("Brasil", 1990, "young")
brazil_2020 <- create_demo_data("Brasil", 2020, "balanced")
japan_2020 <- create_demo_data("Japão", 2020, "aging")
# Combinar dados
demo_data <- bind_rows(brazil_1990, brazil_2020, japan_2020)
# Processar os dados para plotagem da pirâmide
demo_data <- demo_data |>
mutate(
sex = case_when(
sex == "Male" ~ "Masculino",
sex == "Female" ~ "Feminino"
),
sex = factor(sex, levels = c("Masculino", "Feminino")),
age_group = factor(age_group, levels = c("0-4", "5-9", "10-14", "15-19", "20-24",
"25-29", "30-34", "35-39", "40-44", "45-49",
"50-54", "55-59", "60-64", "65-69", "70-74",
"75-79", "80-84", "85+"))
) |>
group_by(country, year) |>
mutate(
share = population / sum(population) * 100,
share = if_else(sex == "Masculino", -share, share)
) |>
ungroup()
Pirâmide Demográfica Básica
Vamos começar com uma pirâmide populacional básica usando dados demográficos do Brasil de 1990. Cada barra mostra que porcentagem da população total pertence a um grupo etário e sexo específico.
A visualização é chamada de “pirâmide” devido à sua forma distintiva: larga na base (muitos jovens), gradualmente estreitando pelas idades médias (menos adultos) e menor no topo (muito poucos idosos). Esta forma triangular era típica da maioria dos países no passado e ainda é comum em nações em desenvolvimento.
# Filtrar dados para Brasil 1990
brazil_90 <- demo_data |>
filter(country == "Brasil", year == 1990)
# Gráfico básico da pirâmide
ggplot(brazil_90, aes(x = age_group, y = share)) +
geom_col(aes(fill = sex, color = sex)) +
coord_flip() +
guides(fill = "none", color = "none") +
scale_y_continuous(
breaks = seq(-8, 8, 2),
labels = c("8", "6", "4", "2", "0", "2", "4", "6", "8")
) +
labs(x = "Grupo Etário", y = "Participação da População (%)")
Pirâmide Melhorada com Cores e Rótulos
Vamos melhorar nossa pirâmide com melhores cores e rótulos explicativos. Para representação de gênero, usaremos verde para homens e roxo para mulheres, evitando estereótipos tradicionais enquanto garantimos que as cores sejam claramente distinguíveis e acessíveis.
colors <- c("#1B9E77", "#7570B3") # Verde para homens, roxo para mulheres
font <- "Open Sans"
ggplot(brazil_90, aes(x = age_group, y = share)) +
geom_col(aes(fill = sex, color = sex)) +
coord_flip() +
guides(fill = "none", color = "none") +
geom_hline(yintercept = 0, color = "black", linewidth = 0.5) +
annotate(
"text",
x = 16,
y = -6,
label = "Masculino",
color = colors[1],
family = font,
size = 4,
fontface = "bold"
) +
annotate(
"text",
x = 16,
y = 6,
label = "Feminino",
color = colors[2],
family = font,
size = 4,
fontface = "bold"
) +
scale_y_continuous(
breaks = seq(-8, 8, 2),
labels = c("8", "6", "4", "2", "0", "2", "4", "6", "8")
) +
scale_color_manual(values = colors) +
scale_fill_manual(values = colors) +
labs(
title = "Pirâmide Populacional do Brasil - 1990",
x = "Grupo Etário",
y = "Participação da População (%)"
) +
theme_minimal(base_size = 12, base_family = font) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major.x = element_line(linetype = 2, color = "grey70"),
plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
)
Comparação Temporal
Um dos usos mais poderosos das pirâmides demográficas é mostrar como a estrutura populacional muda ao longo do tempo. Vamos comparar o Brasil em 1990 versus 2020:
# Comparar Brasil ao longo dos períodos
brazil_comparison <- demo_data |>
filter(country == "Brasil")
ggplot(brazil_comparison, aes(x = age_group, y = share)) +
geom_col(aes(fill = sex, color = sex)) +
coord_flip() +
facet_wrap(~ year, labeller = label_both) +
guides(fill = "none", color = "none") +
geom_hline(yintercept = 0, color = "black", linewidth = 0.3) +
scale_y_continuous(
breaks = seq(-8, 8, 4),
labels = c("8", "4", "0", "4", "8")
) +
scale_color_manual(values = colors) +
scale_fill_manual(values = colors) +
labs(
title = "Transição Demográfica do Brasil: 1990 vs 2020",
x = "Grupo Etário",
y = "Participação da População (%)",
caption = "Note a mudança de uma população jovem (formato pirâmide) para uma estrutura mais balanceada"
) +
theme_minimal(base_size = 12, base_family = font) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major.x = element_line(linetype = 2, color = "grey80"),
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
strip.text = element_text(size = 12, face = "bold")
)
Comparação Entre Países
Vamos comparar diferentes países para ver como as estruturas demográficas variam. Compararemos Brasil (balanceado) com Japão (população envelhecida):
# Comparar diferentes países em 2020
country_comparison <- demo_data |>
filter(year == 2020)
ggplot(country_comparison, aes(x = age_group, y = share)) +
geom_col(aes(fill = sex, color = sex)) +
coord_flip() +
facet_wrap(~ country) +
guides(fill = "none", color = "none") +
geom_hline(yintercept = 0, color = "black", linewidth = 0.3) +
scale_y_continuous(
breaks = seq(-8, 8, 4),
labels = c("8", "4", "0", "4", "8")
) +
scale_color_manual(values = colors) +
scale_fill_manual(values = colors) +
labs(
title = "Comparação da Estrutura Populacional: 2020",
x = "Grupo Etário",
y = "Participação da População (%)",
caption = "O Brasil mostra estrutura balanceada enquanto o Japão exibe padrão de população envelhecida"
) +
theme_minimal(base_size = 12, base_family = font) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major.x = element_line(linetype = 2, color = "grey80"),
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
strip.text = element_text(size = 12, face = "bold")
)
Comparação por Sobreposição
Para uma comparação mais direta entre períodos, podemos sobrepor diferentes anos usando linhas e barras:
brazil_overlay <- demo_data |>
filter(country == "Brasil")
breaks_share <- seq(-8, 8, 2)
labels_share <- c("8", "6", "4", "2", "0", "2", "4", "6", "8")
ggplot() +
geom_col(
data = filter(brazil_overlay, year == 2020),
aes(age_group, share, fill = sex, color = sex),
alpha = 0.8
) +
geom_step(
data = filter(brazil_overlay, year == 1990),
aes(age_group, share, group = sex),
color = "black",
alpha = 0.9,
linewidth = 1
) +
coord_flip() +
guides(fill = "none", color = "none") +
scale_y_continuous(
breaks = breaks_share,
labels = labels_share
) +
labs(
title = "Evolução Demográfica do Brasil: 1990 → 2020",
subtitle = "Linhas pretas mostram estrutura de 1990, barras coloridas mostram estrutura de 2020",
x = "Grupo Etário",
y = "Participação da População (%)"
) +
scale_color_manual(values = colors) +
scale_fill_manual(values = colors) +
theme_minimal(base_size = 12, base_family = font) +
theme(
panel.grid.minor = element_blank(),
panel.grid.major.x = element_line(linetype = 2, color = "grey80"),
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 11)
)
Trabalhando com Fontes de Dados Brasileiros
Para dados demográficos brasileiros reais, você pode usar várias fontes oficiais:
IBGE (Instituto Brasileiro de Geografia e Estatística)
O pacote {sidrar}
fornece acesso ao sistema SIDRA do IBGE:
Usando o Pacote geobr
O pacote {geobr}
inclui alguns dados demográficos e pode ser combinado com informações do Censo:
Principais Insights das Pirâmides Demográficas
Ao analisar pirâmides demográficas, procure por estes padrões principais:
- População Jovem (Formato Pirâmide): Base larga indica altas taxas de natalidade e baixa expectativa de vida
- População Envelhecida (Pirâmide Invertida): Base estreita com topo mais largo mostra declínio nas taxas de natalidade e aumento da longevidade
- População Estável (Formato Barril): Distribuição relativamente equilibrada entre grupos etários
- Bônus Demográfico: Pode indicar baby booms, padrões migratórios ou eventos históricos
Resumo
As pirâmides demográficas são ferramentas poderosas para visualizar estrutura populacional e entender tendências demográficas. Pontos principais:
- Use esquemas de cores consistentes que evitem estereótipos de gênero
- Considere comparações temporais e entre países
- Técnicas de sobreposição podem mostrar efetivamente transições demográficas
- Dados demográficos brasileiros estão disponíveis através do IBGE via pacote sidrar
- Sempre forneça rótulos claros e contexto para suas visualizações
A mudança de formatos tradicionais de pirâmide para estruturas mais balanceadas ou até invertidas reflete transições demográficas globais e tem implicações importantes para planejamento de políticas, desenvolvimento econômico e serviços sociais.
Pronto para explorar mais visualizações de dados brasileiros? Confira nosso tutorial sobre Fontes de Dados Brasileiros ou aprenda sobre Mapas Interativos.