boxplot() em R: Como fazer BoxGráficos no RStudio

⚡ Resumo Inteligente

BoxA função `plot` em R resume uma distribuição numérica através de sua mediana, quartis, limites (bigodes) e outliers, usando a função `geom_boxplot()` do ggplot2. Este tutorial constrói um boxplot no conjunto de dados de qualidade do ar e adiciona camadas como cor, pontos, dispersão (jitter), entalhes e comparações entre grupos.

  • 📐 Resumo de cinco números: A caixa abrange o primeiro ao terceiro quartil, a linha marca a mediana e os limites do gráfico atingem 1.5 vezes o intervalo interquartil.
  • 🧱 Sintaxe básica: ggplot(df, aes(x = group, y = value)) + geom_boxplot() produz uma caixa por nível do grupo.ping fator.
  • ???? Estilo Outlier: outlier.colour, outlier.shape e outlier.size controlam como os pontos além dos bigodes são desenhados.
  • 💠 Exibindo observações: geom_jitter() desloca a sobreposiçãoping aponta para os lados, revelando o tamanho da amostra por trás de cada caixa.
  • 📉 Entalhado Boxé: notch = TRUE desenha o intervalo de confiança da mediana e não sobreposição.ping Os entalhes indicam uma diferença real.
  • ???? Grouping: Mapaping O preenchimento interno de geom_boxplot() divide cada categoria em várias caixas lado a lado.

Boxplotar em R

boxplot() em R

boxplot() em R ajuda a visualizar a distribuição dos dados por quartil e detectar a presença de outliers. Você pode usar o objeto geométrico geom_boxplot() da biblioteca ggplot2 para desenhar um boxplot() em R.

Usaremos o conjunto de dados de qualidade do ar para introduzir o boxplot() no R com ggplot. O conjunto de dados registra medições diárias da qualidade do ar em Nova York de maio a setembro de 1973 e contém 153 observações. Usaremos as seguintes variáveis:

  • Ozônio: Variável numérica
  • Vento: Variável numérica
  • Mês: maio a setembro. Variável numérica

Antes de desenhar um, é importante saber exatamente o que cada parte da caixa representa.

Como ler um Box Gráfico: Quartis, Intervalo Interquartil (IQR) e Valores Atípicos

Cada elemento de um diagrama de caixa codifica um número do resumo de cinco números. Saber qual é qual transforma o gráfico de mera decoração em ferramenta de análise.

  • Dobradiça inferior: O primeiro quartil, Q1. Vinte e cinco por cento das observações estão abaixo dele.
  • Linha mediana: o segundo quartil. Sua posição dentro da caixa revela a assimetria: uma linha deslocada para baixo significa que os dados são assimétricos à direita.
  • Dobradiça superior: O terceiro quartil, Q3. Setenta e cinco por cento das observações estão abaixo dele.
  • Box height: O intervalo interquartil, IQR = Q3 – Q1, que engloba a metade central dos dados e é a medida padrão e robusta de dispersão.
  • Bigodes: Elas se estendem até a observação mais extrema ainda dentro de 1.5 vezes o intervalo interquartil (IQR) da dobradiça mais próxima. Elas não são o mínimo e o máximo.
  • Pontos além dos bigodes: Observações sinalizadas como valores discrepantes pela regra de 1.5 IQR.

Duas ressalvas. Primeiro, um "valor discrepante" aqui é um indicador estatístico, não um erro: em uma distribuição assimétrica como a da concentração de ozônio, valores altos são esperados e não devem ser excluídos. Segundo, um diagrama de caixa oculta o formato da distribuição, portanto, dois grupos com caixas idênticas podem ter dados subjacentes muito diferentes. Adicionar pontos com dispersão aleatória, como mostrado abaixo, evita esse problema.

Box Gráfico de linhas versus histograma versus gráfico de violino em R

Os três gráficos descrevem uma distribuição numérica, mas cada um revela algo que os outros escondem.

Critérios Box Enredo Histograma Enredo de violino
Shows Mediana, quartis, valores discrepantes Frequência em cada intervalo Curva de densidade completa
Revseals múltiplos picos Não Sim Sim
Sinaliza valores discrepantes Sim, explicitamente. Apenas visualmente Não diretamente
Comparando muitos grupos Excelente Desajeitado Boa
Precisa de uma opção de ajuste Não Sim, contagem de lixeiras Sim, largura de banda
objeto ggplot2 geom_boxplot() geom_histograma() geom_violin()

Uma solução comum é desenhar um gráfico de violino com um gráfico de caixa estreito dentro dele, o que mantém o formato da densidade e o resumo dos quartis em um único gráfico. Veja o tutorial de histograma para o lado da comparação relacionado ao agrupamento.

Criar Box Enredo

Antes de começar a criar seu primeiro boxplot() em R, você precisa manipular os dados da seguinte forma:

  • Etapa 1: importe os dados
  • Etapa 2: eliminar variáveis ​​desnecessárias
  • Etapa 3: Converter o mês em um fator ordenado
  • Passo 4: Crie uma nova variável categórica dividindo cada mês em três partes: Início, Meio e Fim.
  • Etapa 5: remover observações ausentes

Todas essas etapas são realizadas com dplyr e o operador de pipeline %>%.

library(dplyr)
library(ggplot2)
# Step 1
data_air <- airquality %>%

#Step 2
select(-c(Solar.R, Temp)) %>%

#Step 3
mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), 
       
#Step 4 
day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))

Uma boa prática é verificar a estrutura dos dados com a função vislumbre().

glimpse(data_air)

Saída:

## Observations: 153
## Variables: 5
## $ Ozone   <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ...
## $ Wind    <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6...
## $ Month   <ord> May, May, May, May, May, May, May, May, May, May, May,...
## $ Day     <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...

Tanto Ozone quanto Solar.R contêm valores NA. Como geom_boxplot() os descartaria silenciosamente e exibiria um aviso, é mais limpo removê-los explicitamente.

# Step 5
data_air_nona <-data_air %>% na.omit()	

Gráfico de caixa básico

Agora, trace o gráfico da distribuição do ozônio por mês.

# Store the graph
box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone))
# Add the geometric object box plot
box_plot +
    geom_boxplot()

Code Explicação

  • Armazene o gráfico para uso posterior
    • box_plot: o gráfico base é armazenado no objeto box_plot, o que permite adicionar camadas posteriormente sem repetir toda a chamada.
  • Adicione o objeto geométrico
    • Você passa o conjunto de dados data_air_nona para ggplot boxplot.
    • Dentro do argumento aes(), você adiciona o eixo xey.
    • O sinal + significa que você deseja que R continue lendo o código. Isso torna o código mais legível ao quebrá-lo.
    • Use geom_boxplot() para criar um box plot

Saída:

Básico Box Enredo

Mudar lado do gráfico

Você pode virar a lateral do gráfico.

box_plot +
  geom_boxplot()+
  coord_flip()

Code Explicação

  • box_plot: você usa o gráfico armazenado. Evita reescrever todos os códigos cada vez que você adiciona novas informações ao gráfico.
  • geom_boxplot(): desenha as caixas e os bigodes
  • coord_flip(): vira a lateral do gráfico

Saída:

Mudar lado do gráfico

Alterar a cor do outlier

Você pode alterar a cor, a forma e o tamanho dos valores discrepantes.

box_plot +
    geom_boxplot(outlier.colour = "red",
        outlier.shape = 2,
        outlier.size = 3) +
    theme_classic()

Code Explicação

  • outlier.colour=”red”: Controla a cor dos outliers
  • outlier.shape=2: altera a forma do outlier. 2 refere-se ao triângulo
  • outlier.size=3: Altera o tamanho do triângulo. Números maiores desenham marcadores maiores.

Saída:

Alterar cor do outlier

Adicione uma estatística resumida

Você pode sobrepor uma estatística resumida, como a média do grupo, que o próprio gráfico de caixa não mostra.

box_plot +
    geom_boxplot() +
    stat_summary(fun.y = mean,
        geom = "point",
        size = 3,
        color = "steelblue") +
    theme_classic()

Code Explicação

  • A função `stat_summary()` adiciona uma estatística calculada sobre o gráfico de caixa.
  • O argumento `fun` controla qual estatística é retornada. Aqui, é a média. Observe que códigos mais antigos usam `fun.y`, que o ggplot2 tornou obsoleto na versão 3.3.0.
  • Nota: Outras estatísticas estão disponíveis, como mínimo e máximo. Mais de uma estatística pode ser exibida no mesmo gráfico
  • geom = “ponto”: traça a média com um ponto
  • size=3: Tamanho do ponto
  • color =”steelblue”: Cor dos pontos

Saída:

Adicionar uma estatística resumida

Box Plotar com pontos

Em seguida, adicione uma camada de gráfico de pontos sobre as caixas. Cada ponto representa uma única observação, o que torna visível o tamanho da amostra por trás de cada caixa.

box_plot +
    geom_boxplot() +
    geom_dotplot(binaxis = 'y',
        dotsize = 1,
        stackdir = 'center') +
    theme_classic()

Code Explicação

  • A função `geom_dotplot()` desenha um ponto por observação, empilhados dentro de cada compartimento.
  • binaxis='y': altera a posição dos pontos ao longo do eixo y. Por padrão, eixo x
  • dotsize=1: Tamanho dos pontos
  • stackdir='center': Maneira de empilhar os pontos: Quatro valores:
    • “para cima” (padrão),
    • "baixa"
    • "Centro"
    • “centro todo”

Saída:

Box Plotar com pontos

Controle Estético do Box Enredo

Mude a cor da caixa

Você pode alterar as cores do grupo.

ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) +
    geom_boxplot() +
    theme_classic()

Code Explicação

  • As cores dos grupos são controladas no mapa aes().pingVocê pode usar `color=Month` para alterar a cor do gráfico de caixa (box plot) de acordo com os meses.

Saída:

Mude a cor do Box

Box plotar com vários grupos

Também é possível adicionar vários grupos. Você pode visualizar a diferença na qualidade do ar de acordo com o dia da medida.

ggplot(data_air_nona, aes(Month, Ozone)) +
    geom_boxplot(aes(fill = day_cat)) +
    theme_classic()

Code Explicação

  • O mapa aes()ping O objeto geométrico controla os grupos a serem exibidos (essa variável precisa ser um fator).
  • aes(fill= day_cat) permite criar três caixas para cada mês no eixo x

Saída:

Box Plotar com vários grupos

Box Plotar com pontos nervosos

Outra forma de mostrar observações individuais é com pontos dispersos aleatoriamente. A dispersão aleatória é a escolha usual quando um eixo x categórico faz com que muitos pontos fiquem na mesma posição.

Este método evita a sobreposição.ping dos dados discretos.

box_plot +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(width = 0.21)) +
    theme_classic()

Code Explicação

  • A função `geom_jitter()` adiciona um pequeno deslocamento aleatório a cada ponto para que haja sobreposição.ping Os valores tornam-se visíveis.
  • shape=15 altera a forma dos pontos. 15 representa os quadrados
  • color = “steelblue”: Muda a cor do ponto
  • position = position_jitter(width = 0.21): controla o quanto os pontos são deslocados lateralmente, medido em unidades do eixo x. O padrão é 40% do espaçamento entre as categorias.

Saída:

Box Plotar com pontos nervosos

Você pode ver a diferença entre o primeiro gráfico com o método jitter e o segundo com o método pontual.

box_plot +
    geom_boxplot() +
    geom_point(shape = 5,
        color = "steelblue") +
    theme_classic()

Box Plotar com pontos nervosos

Entalhado Box Enredo

Um recurso interessante de geom_boxplot() é uma função boxplot com entalhe em R. O gráfico com entalhe estreita a caixa ao redor da mediana. O principal objetivo de um box plot entalhado é comparar a significância da mediana entre os grupos. Há fortes evidências de que dois grupos têm medianas diferentes quando os entalhes não se sobrepõem. Um entalhe é calculado da seguinte forma:

Entalhado Box Enredo

Aqui, IQR é o intervalo interquartil e n é o número de observações no grupo. O entalhe abrange aproximadamente o intervalo de confiança de 95% da mediana.

box_plot +
    geom_boxplot(notch = TRUE) +
    theme_classic()

Code Explicação

  • geom_boxplot(notch = TRUE): desenha o diagrama de caixa com entalhes em torno da mediana

Saída:

Entalhado Box Enredo

Como adicionar títulos, rótulos e cores personalizadas a um Box Plotar em R

Os gráficos acima usam as configurações padrão do ggplot2, que extraem os nomes das variáveis ​​diretamente do dataframe. Um gráfico publicável precisa de rótulos legíveis e uma paleta de cores bem definida.

Títulos e rótulos dos eixos. Uma única chamada labs() define todos os elementos de texto:

box_plot +
    geom_boxplot(fill = "coral", alpha = 0.7) +
    labs(title = "Ozone concentration by month",
        subtitle = "New York, May to September 1973",
        x = "Month",
        y = "Ozone (parts per billion)",
        caption = "Source: airquality dataset") +
    theme_classic()

Escolha suas próprias cores. Use scale_fill_manual() quando fill estiver mapeado dentro de aes(), e scale_colour_manual() quando colour estiver:

ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) +
    geom_boxplot() +
    scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) +
    theme_classic() +
    theme(legend.position = "none")

A legenda está desativada aqui porque o eixo x já nomeia cada mês, então repeti-la seria um desperdício de espaço.

Reorganizando as caixas. Os níveis do fator determinam a ordem no eixo. Como o mês foi criado como um fator ordenado, ele já está em ordem cronológica. Para um fator não ordenado, ordene pela mediana.

ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) +
    geom_boxplot() +
    theme_classic()

Salvando o gráfico. ggsave() grava o último gráfico no disco em uma resolução que você controla:

ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)

Box Gráfico em R: Code Referência

A tabela abaixo lista a chamada do ggplot2 para cada variante de box plot abordada acima:

Objetivo Code
Gráfico de caixa básico
ggplot(df, aes(x = x1, y = y)) + geom_boxplot()
Inverta a orientação.
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip()
Gráfico de caixa entalhada
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE)
Box enredo com pontos nervosos
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21))
Colorir por grupo
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot()
Vários grupos por categoria
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2))
Adicione a média do grupo
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point")

Verifique também: - Tutorial R para iniciantes: Aprenda a linguagem de programação R

Perguntas Frequentes

Os limites dos bigodes representam a observação mais extrema, situada dentro de 1.5 vezes o intervalo interquartil do quartil mais próximo. Eles não representam o mínimo e o máximo, e qualquer valor além deles é considerado um ponto discrepante.

Não automaticamente. A regra de 1.5 IQR é uma convenção, não uma prova de erro. Investigue cada ponto primeiro: dados distorcidos, como leituras de ozônio, naturalmente produzem valores altos que são medições genuínas.

sobreposiçãoping Os entalhes sugerem que não há evidências fortes de que as duas medianas sejam diferentes. Não sobreposição.ping Os entalhes indicam uma provável diferença real, aproximadamente equivalente a uma comparação com 95% de confiança.

Box Os gráficos são uma etapa exploratória padrão antes do treinamento: eles revelam assimetrias, valores discrepantes e diferentes escalas de características entre as classes. As equipes também os utilizam para comparar a precisão do modelo em diferentes partições de validação cruzada.

Sim. Assistentes de IA podem explicar erros como um eixo x contínuo produzindo um único quadrado, e sugerir o mapa aes() correto.pinge sinalize argumentos obsoletos como fun.y. Sempre execute o código corrigido com seus próprios dados.

Resuma esta postagem com: