Come etichettare i valori anomali nei boxplot in ggplot2
Questo tutorial fornisce un esempio passo passo di come etichettare i valori anomali nei boxplot in ggplot2.
Passaggio 1: creare il frame di dati
Innanzitutto, creiamo il seguente frame di dati che contiene informazioni sui punti segnati da 60 diversi giocatori di basket in tre diverse squadre:
#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 : abbiamo utilizzato la funzione set.seed() per garantire che questo esempio sia riproducibile.
Passaggio 2: definire una funzione per identificare i valori anomali
In ggplot2, un’osservazione è definita come un valore anomalo se soddisfa uno dei due requisiti seguenti:
- L’osservazione è 1,5 volte l’intervallo interquartile inferiore al primo quartile (Q1)
- L’osservazione è 1,5 volte l’intervallo interquartile sopra il terzo quartile (Q3).
Possiamo creare la seguente funzione in R per etichettare le osservazioni come valori anomali se soddisfano uno di questi due requisiti:
find_outlier <- function (x) {
return (x < quantile(x, .25) - 1.5*IQR(x) | x > quantile(x, .75) + 1.5*IQR(x))
}
Correlato: Come interpretare l’intervallo interquartile
Passaggio 3: etichettare i valori anomali nei boxplot in ggplot2
Quindi possiamo utilizzare il seguente codice per etichettare i valori anomali nei boxplot in 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 )
Si noti che nel grafico sono etichettati due valori anomali.
Il primo valore anomalo è un giocatore della squadra A che ha segnato 7,85 punti e l’altro valore anomalo è un giocatore della squadra B che ha segnato 10,11 punti.
Tieni presente che potremmo anche utilizzare una variabile diversa per etichettare questi valori anomali.
Ad esempio, potremmo scambiare i punti del giocatore nella funzione mutate() per etichettare i valori anomali in base al nome del giocatore:
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 )
Il valore anomalo della squadra A ora ha un’etichetta N e il valore anomalo della squadra B ora ha un’etichetta D , poiché questi rappresentano i nomi dei giocatori che hanno valori anomali per i punti.
Nota : l’argomento hjust in geom_text() viene utilizzato per spostare l’etichetta orizzontalmente verso destra in modo che non si sovrapponga al punto del tracciato.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in ggplot2:
Come cambiare la dimensione del carattere in ggplot2
Come rimuovere una legenda in ggplot2
Come ruotare le etichette degli assi in ggplot2