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
label
può 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
label
possono 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)