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.

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:
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:
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:
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:
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:
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:
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 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:
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()
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:
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:
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











