Como rotular outliers em boxplots no ggplot2


Este tutorial fornece um exemplo passo a passo de como rotular outliers em boxplots no ggplot2.

Etapa 1: crie o quadro de dados

Primeiro, vamos criar o seguinte quadro de dados que contém informações sobre os pontos marcados por 60 jogadores de basquete diferentes em três times diferentes:

 #make this example reproducible
set. seeds (1)

#create data frame
df <- data. frame (team=rep(c('A', 'B', 'C'), each= 20 ),
                 player=rep(LETTERS[1:20], times= 3 ),
                 points=round(rnorm(n=60, mean=30, sd=10), 2))

#view head of data frame
head(df)

  team player points
1 AA 23.74
2AB 31.84
3 AC 21.64
4AD 45.95
5 AE 33.30
6 FY 21.80

Nota : Usamos a função set.seed() para garantir que este exemplo seja reproduzível.

Etapa 2: definir uma função para identificar valores discrepantes

No ggplot2, uma observação é definida como outlier se atender a um dos dois requisitos a seguir:

  • A observação é 1,5 vezes o intervalo interquartil abaixo do primeiro quartil (Q1)
  • A observação é 1,5 vezes o intervalo interquartil acima do terceiro quartil (Q3).

Podemos criar a seguinte função em R para rotular as observações como outliers se elas atenderem a um destes dois requisitos:

 find_outlier <- function (x) {
  return (x < quantile(x, .25) - 1.5*IQR(x) | x > quantile(x, .75) + 1.5*IQR(x))
}

Relacionado: Como interpretar o intervalo interquartil

Etapa 3: rotular valores discrepantes em boxplots em ggplot2

Então podemos usar o seguinte código para rotular outliers em boxplots em ggplot2:

 library (ggplot2)
library (dplyr)

#add new column to data frame that indicates if each observation is an outlier
df <- df %>%
        group_by(team) %>%
        mutate(outlier = ifelse(find_outlier(points), points, NA))

#create box plot of points by team and label outliers
ggplot(df, aes(x=team, y=points)) +
  geom_boxplot() +
  geom_text(aes(label=outlier), na. rm = TRUE , hjust= -.5 ) 

rotular outliers em boxplots em ggplot2

Observe que dois outliers estão rotulados no gráfico.

O primeiro outlier é um jogador do Time A que marcou 7,85 pontos e o outro outlier é um jogador do Time B que marcou 10,11 pontos.

Observe que também poderíamos usar uma variável diferente para rotular esses valores discrepantes.

Por exemplo, poderíamos trocar os pontos do jogador na função mutate() para rotular outliers com base no nome do jogador:

 library (ggplot2)
library (dplyr)

#add new column to data frame that indicates if each observation is an outlier
df <- df %>%
        group_by(team) %>%
        mutate(outlier = ifelse(find_outlier(points), player, NA))

#create box plot of points by team and label outliers
ggplot(df, aes(x=team, y=points)) +
  geom_boxplot() +
  geom_text(aes(label=outlier), na. rm = TRUE , hjust= -.5 ) 

O valor discrepante do time A agora tem um rótulo N e o valor discrepante do time B agora tem um rótulo D , pois representam os nomes dos jogadores que possuem valores discrepantes para pontos.

Nota : O argumento hjust em geom_text() é usado para empurrar o rótulo horizontalmente para a direita para que não se sobreponha ao ponto do gráfico.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns no ggplot2:

Como alterar o tamanho da fonte no ggplot2
Como remover uma legenda no ggplot2
Como girar rótulos de eixo no ggplot2

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *