Histograma

Distribuição de variáveis numéricas

Autor

Henrique Alvarenga da Silva

História

O histograma é um dos gráficos mais fundamentais na visualização de dados estatísticos. Sua origem remonta a Karl Pearson em 1895, quando o estatístico britânico desenvolveu essa ferramenta para visualizar distribuições de variáveis contínuas. Pearson reconheceu que representar dados numéricos contínuos exigia uma abordagem diferente daquela usada para categorias, levando à criação de uma visualização que agrupa valores em intervalos (bins) e mostra a frequência de observações em cada intervalo.

Desde então, o histograma tornou-se indispensável em análise exploratória de dados, permitindo que pesquisadores entendam rapidamente a forma, centro e dispersão de distribuições.

O que é um Histograma?

Um histograma é um gráfico que representa a distribuição de uma variável numérica contínua. Os dados são organizados em intervalos (chamados de “bins”) e a altura de cada barra corresponde à frequência de observações dentro daquele intervalo.

Diferentemente de outras visualizações, o histograma mostra:

  • Forma da distribuição: É simétrica? Assimétrica? Bimodal?
  • Centro dos dados: Onde a maioria das observações se concentra?
  • Dispersão: Quão espalhados estão os dados?
  • Presença de outliers: Existem valores extremos?

Diferença Fundamental: Barras vs. Histograma

Esta é uma confusão comum entre iniciantes. Vamos esclarecer:

Gráfico de Barras (Bar Chart)

  • Representa variáveis categóricas
  • Cada barra representa uma categoria
  • Há espaço entre as barras (indicando que as categorias são distintas)
  • Altura = frequência ou valor da categoria

Histograma

  • Representa variáveis numéricas contínuas
  • As barras mostram intervalos (bins) de valores contínuos
  • Não há espaço entre as barras (indicando continuidade)
  • Altura = frequência de observações no intervalo

Vamos visualizar essa diferença com dados reais:

Ver código R
# Gráfico de barras: contagem de pacientes por sexo (variável categórica)
p1 <- ggplot(pacientes, aes(x = sexo)) +
  geom_bar(fill = paleta_cat[1], alpha = 0.8, width = 0.6) +
  labs(
    title = "Gráfico de Barras",
    subtitle = "Contagem por categoria (Sexo)",
    x = "Sexo",
    y = "Frequência"
  ) +
  tema_graficos()

# Histograma: distribuição de glicose (variável numérica contínua)
p2 <- ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(fill = paleta_cat[2], alpha = 0.8, bins = 20, color = "white") +
  labs(
    title = "Histograma",
    subtitle = "Distribuição contínua (Glicose)",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

p1 + p2

Observe: O gráfico de barras (à esquerda) tem espaços entre as barras porque as categorias são discretas. O histograma (à direita) não tem espaços porque os dados são contínuos.

O Papel dos Bins

Um dos aspectos mais críticos ao criar um histograma é escolher o número apropriado de bins. Muito poucos bins ocultam detalhes importantes da distribuição; muitos bins criam ruído visual e dificultam a interpretação.

Vejamos como o mesmo conjunto de dados (glicose) parece diferente com números variados de bins:

Ver código R
ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(fill = paleta_cat[1], alpha = 0.8, bins = 10, color = "white") +
  labs(
    title = "Glicose com 10 bins",
    subtitle = "Poucos bins — forma geral da distribuição",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

Observação: Com apenas 10 bins, perdemos muitos detalhes sobre a distribuição. A forma parece simples demais.

Ver código R
ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(fill = paleta_cat[2], alpha = 0.8, bins = 15, color = "white") +
  labs(
    title = "Glicose com 15 bins",
    subtitle = "Equilíbrio — detalhes claros sem ruído",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

Observação: Com 15 bins, a distribuição fica mais clara, mostrando uma forma razoavelmente suave e interpretável.

Ver código R
ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(fill = paleta_cat[3], alpha = 0.8, bins = 30, color = "white") +
  labs(
    title = "Glicose com 30 bins",
    subtitle = "Mais detalhe — ainda interpretável",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

Observação: 30 bins mostram mais variação local, reveelando flutuações na distribuição.

Ver código R
ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(fill = cores$vermelho, alpha = 0.8, bins = 50, color = "white") +
  labs(
    title = "Glicose com 50 bins",
    subtitle = "Muitos bins — ruído visual excessivo",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

Observação: Com 50 bins, surgem irregularidades que provavelmente não representam padrões reais — isso é ruído amostral.

Experimento Interativo: Ajuste o Número de Bins

Mova o controle deslizante abaixo para explorar interativamente como diferentes números de bins afetam a aparência do histograma:

Dica prática: Uma regra comum é usar entre 5 e 50 bins, com o número ideal frequentemente próximo de √n (raiz quadrada do tamanho da amostra). Para 403 observações, isso sugere cerca de 20 bins.

Estratificação: Comparando Distribuições

Frequentemente, queremos comparar distribuições entre grupos. O histograma pode ser estratificado usando faceting:

Ver código R
ggplot(pacientes, aes(x = glicose, fill = sexo)) +
  geom_histogram(alpha = 0.8, bins = 20, color = "white") +
  scale_fill_manual(values = paleta_sexo) +
  facet_wrap(~ sexo, nrow = 2) +
  labs(
    title = "Distribuição de Glicose por Sexo",
    subtitle = "Histogramas em painel para comparação",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos() +
  theme(legend.position = "none")

Observe como as distribuições de glicose diferem entre homens e mulheres. Essa visualização facilita a comparação de forma e localização.

Quando Usar um Histograma

Use histogramas quando desejar:

Explorar a distribuição de uma variável numérica contínua. ✓ Identificar assimetria (skewness) na distribuição. ✓ Verificar normalidade (dados aproximadamente distribuídos normalmente). ✓ Detectar multimodalidade (múltiplos picos na distribuição). ✓ Identificar gaps ou valores extremos na distribuição. ✓ Comunicar a forma geral de um conjunto de dados.

Erros Comuns

❌ Muito poucos bins

Oculta a verdadeira forma da distribuição e apaga detalhes importantes.

❌ Muito muitos bins

Cria ruído visual e torna difícil discernir padrões reais dos flutuações aleatórias.

❌ Confundir com gráfico de barras

Lembre-se: histogramas são para dados contínuos, gráficos de barras para dados categóricos.

❌ Ignorar a amplitude dos dados

Certifique-se de que o eixo x cobre adequadamente o intervalo de seus dados.

❌ Usar cor de forma enganosa

Cores devem comunicar informação, não apenas decorar o gráfico.

Exemplos com Código R

Histograma Básico

Ver código R
ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(
    bins = 20,
    fill = cores$azul,
    color = "white",
    alpha = 0.85
  ) +
  labs(
    title = "Distribuição de Glicose",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

Variando a Largura dos Bins

Ver código R
p1 <- ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(binwidth = 3, fill = cores$verde, alpha = 0.8, color = "white") +
  labs(title = "Largura = 3", x = "Glicose", y = "Frequência") +
  tema_graficos()

p2 <- ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(binwidth = 10, fill = cores$laranja, alpha = 0.8, color = "white") +
  labs(title = "Largura = 10", x = "Glicose", y = "Frequência") +
  tema_graficos()

p1 + p2

Sobreposição de Densidade

Para adicionar uma curva de densidade suave ao histograma:

Ver código R
ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(
    aes(y = after_stat(density)),
    bins = 20,
    fill = cores$azul,
    alpha = 0.6,
    color = "white"
  ) +
  geom_density(
    color = cores$vermelho,
    linewidth = 1.2
  ) +
  labs(
    title = "Histograma com Densidade Sobreposta",
    x = "Glicose (mg/dL)",
    y = "Densidade"
  ) +
  tema_graficos()

Histograma Facetado por Sexo

Ver código R
ggplot(pacientes, aes(x = glicose, fill = sexo)) +
  geom_histogram(
    bins = 20,
    alpha = 0.8,
    color = "white"
  ) +
  scale_fill_manual(values = paleta_sexo) +
  facet_wrap(~ sexo) +
  labs(
    title = "Glicose Estratificada por Sexo",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos() +
  theme(legend.position = "none")

Versão Interativa com Plotly

Ver código R
p <- ggplot(pacientes, aes(x = glicose)) +
  geom_histogram(
    bins = 20,
    fill = cores$azul,
    alpha = 0.8,
    color = "white"
  ) +
  labs(
    title = "Distribuição de Glicose (Interativa)",
    x = "Glicose (mg/dL)",
    y = "Frequência"
  ) +
  tema_graficos()

para_plotly(p)

Passe o mouse sobre as barras para ver valores exatos!

Resumo

O histograma é uma ferramenta essencial para exploração de dados contínuos. Pontos-chave:

  1. Histogramas mostram distribuições de variáveis contínuas; gráficos de barras mostram categorias
  2. A escolha do número de bins é crítica — nem muito poucos, nem muito muitos
  3. O histograma revela a forma, simetria e spread dos dados
  4. Estratificação permite comparação entre grupos
  5. Combinado com densidade, oferece interpretação mais suave

Quiz

NotaQuizz

Pergunta 1: Qual é a diferença fundamental entre um gráfico de barras e um histograma?

  1. A cor das barras
  2. Um representa variáveis categóricas (com espaços), o outro variáveis contínuas (sem espaços)
  3. O histograma sempre tem mais barras
  4. Nenhuma diferença importante

b) Um representa variáveis categóricas (com espaços), o outro variáveis contínuas (sem espaços)
Um gráfico de barras representa variáveis categóricas discretas com espaço entre as barras. Um histograma representa variáveis numéricas contínuas sem espaços, enfatizando a continuidade.

Pergunta 2: Para um conjunto de dados com 400 observações, quantos bins você aproximadamente escolheria?

  1. 5
  2. 15-20
  3. 100
  4. 200

b) 15-20
A regra de √n sugere √400 ≈ 20 bins. Embora a escolha exata dependa dos dados, 15-20 é geralmente um bom ponto de partida.

Pergunta 3: Por que usar muitos bins (ex., 100 para 400 observações) é problemático?

  1. Torna o gráfico muito colorido
  2. Ocupa muito espaço
  3. Cria ruído visual — flutuações aleatórias parecem padrões reais
  4. Aumenta o tempo de computação

c) Cria ruído visual — flutuações aleatórias parecem padrões reais. Muitos bins criam barras muito estreitas com poucos dados cada uma, fazendo variações aleatórias parecerem como padrões significativos.


Referências

De volta ao topo