Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:ggplot2:ggplot_etichette

Etichette dei valori (ggplot2)

All'interno di un grafico, le etichette dei valori possono essere aggiunte con geom_text() (solo testo) e geom_label() (etichetta, ovvero testo all'interno di un riquadro).

Entrambe queste funzioni richiedono di esplicitare: i testi da inserire, naturalmente (label), e le loro coordinate, di default ereditate da quelle indicate nella funzione aes() eventualmente indicata.

Considerando però che le funzioni permettono di inserire testo libero in base a coordinate, la forma generale è:

geom_text(aes(x, y, label))

Ad esempio, per rappresentare solo le etichette:

ggplot(mtcars) +                          
  geom_text(aes(x = wt, y = mpg,
                label = rownames(mtcars)))

Utile il pacchetto ggrepel (vedi oltre) che permette di produrre, in maniera molto simile, etichette posizionate in maniera che non si sovrappongano.

geom_text

Principali argomenti della funzione:

argomento
nudge_x = 0, nudge_y = 0 scostamento orizzontale o verticale
check_overlap = FALSE se TRUE le etichette che si sovrappongono non vengono stampate
show.legend = NA
parse = FALSE se TRUE, il testo viene interpretato come espressione matematica (vedi plotmath)
library(tidyverse)

Costruiamo un grafico a punti (vedi Grafici a dispersione):

mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text(label = rownames(mtcars))

Come si vede nella figura, le etichette sono centrate sui punti: ereditano cioè le coordinate dei punti, indicate in aes(wt, mpg).

Usiamo l'argomento nudge_y per distanziare le etichette dai punti, e size e color per modificare l'aspetto delle etichette

mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text(label = rownames(mtcars),
            size = 3,
            nudge_y = 1,
            color = "darkgrey")

Nei grafici a torta

geom_label

geom_label() funziona essenzialmente allo stesso modo di geom_text().

Ad esempio, per rappresentare i valori solo con le etichette:

mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_label(aes(label = cyl),
            size = 3)

Osserveremo che:

  • il valore di label può essere indicato o meno in aes(); indicandolo qui, non dobbiamo indicare il dataset, ma *_non viene prodotta una legenda_*; altri argomenti indicati qui produrrebbero invece una legenda (vedi ggplot);
  • i valori indicati in label possono essere numerici, ma verranno interpretati come stringhe; quindi si potranno formattare i numeri con format().

Principali argomenti della funzione:

argomento
nudge_x = 0, nudge_y = 0 scostamento orizzontale o verticale
check_overlap = FALSE se TRUE le etichette che si sovrappongono non vengono stampate
show.legend = NA
parse = FALSE se TRUE, il testo viene interpretato come espressione matematica (vedi plotmath)
label.padding = unit(0.25, "lines") spazio intorno al testo, default = 0,25 linee
label.r = unit(0.15, "lines") raggio (radius) dell'arrotondamento dell'etichetta
label.size = 0.25 dimensione del bordo dell'etichetta

ggrepel

Il pacchetto ggrepel include due funzioni, geom_text_repel() e geom_label_repel(), che distanziano fra di loro (repel) le etichette che altrimenti si sovrapporrebbero. Ad esempio:

library(ggrepel)
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text_repel(label = rownames(mtcars),
                  size = 3)

La collocazione delle etichette è determinata in maniera casuale. Pertanto, se si vuole ottenere un risultato stabile (ad esempio per una pubblicazione o una tesi), è opportuno utilizzare l'argomento seed per la generazione di risultati pseudo-casuali. Ad esempio:

library(ggrepel)
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text_repel(label = rownames(mtcars),
                  size = 3,
                  seed = 1234)

Cambiando il valore, cambierà la disposizione delle etichette. Una volta trovata quella soddisfacente, lasciando il valore nel codice, si otterrà sempre lo stesso risultato.

Vedi aiuto sulle funzioni su RDocumentation

Script di esempio

etichette_ggplot2.R
library(tidyverse)
 
# solo testo delle etichette
ggplot(mtcars) +                          
  geom_text(aes(x = wt, y = mpg,
                label = rownames(mtcars)))
 
# geom_text base                
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text(label = rownames(mtcars))
 
# geom_text
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text(label = rownames(mtcars),
            size = 3,
            nudge_y = 1,
            color = "darkgrey")
 
# geom_label
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_label(aes(label = cyl),
            size = 3)
 
# ggrepel
library(ggrepel)
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point() +
  geom_text_repel(label = rownames(mtcars),
                  size = 3)

Domande? Scrivimi

su Telegram per email
r/ggplot2/ggplot_etichette.txt · Ultima modifica: 05/09/2025 16:48 da Agnese Vardanega