Indice
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
labelpuò essere indicato o meno inaes(); 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
labelpossono essere numerici, ma verranno interpretati come stringhe; quindi si potranno formattare i numeri conformat().
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.
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)




