Menu

La funzione plot() in R: tipi, colori, pch e legende

Come funziona la funzione plot() di R: tipi di grafico, titoli ed etichette degli assi, colori, simboli dei punti (pch), sovrapposizioni con lines() e abline() e legende.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

plot() è la funzione tuttofare di R per i grafici

Per fare un grafico in R, chiama plot(x, y) con due vettori numerici della stessa lunghezza. R disegna un punto per ogni coppia, il primo vettore sull'asse orizzontale e il secondo sull'asse verticale, ed etichetta automaticamente gli assi con i nomi delle variabili:

x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)

plot(x, y)

Il risultato è una nuvola di dodici cerchi vuoti che salgono con regolarità al crescere di x. È tutto qui il prezzo d'ingresso: niente pacchetti da installare, nessuna configurazione. plot() fa parte di R base ed è la funzione dietro la maggior parte dei grafici veloci ed esplorativi.

Dato che l'esecutore di codice di questa pagina mostra solo output testuale, le chiamate di disegno in questo articolo sono frammenti statici: incollale in RStudio o in qualsiasi sessione R locale per vedere le immagini. Quello che puoi eseguire qui è la preparazione dei dati. È comunque una buona abitudine: guarda i numeri prima di farne un grafico.

Se passi un solo vettore, plot(y) usa le posizioni degli indici 1, 2, 3, ... come asse orizzontale: comodo per un'occhiata veloce a una sequenza di misure.

Scegliere il tipo di grafico

L'argomento type decide come vengono disegnate le coppie:

plot(x, y, type = "p")   # points (the default)
plot(x, y, type = "l")   # a connected line
plot(x, y, type = "b")   # both: points joined by line segments
plot(x, y, type = "h")   # vertical bars from zero, like a spike chart
plot(x, y, type = "s")   # a step function

type = "l" trasforma la nuvola di punti in un grafico a linee, ed è quello che vuoi per qualsiasi cosa misurata nel tempo. type = "b" mantiene visibili le singole osservazioni mostrando comunque l'andamento. type = "h" disegna un sottile segmento verticale da zero fino a ogni valore, e type = "s" disegna una scalinata che mantiene ogni valore fino al successivo, utile per quantità che cambiano a salti, come un prezzo o le giacenze di magazzino.

Titoli, etichette e colori

Un grafico senza etichette è un appunto privato per te stesso. Tre argomenti risolvono il problema: main per il titolo, xlab e ylab per le etichette degli assi. col imposta il colore:

plot(x, y,
     type = "b",
     main = "Monthly signups",
     xlab = "Month",
     ylab = "Signups (thousands)",
     col  = "steelblue")

col accetta tre tipi di valori:

  • Colori con nome: "red", "steelblue", "tomato", "darkgreen". R ne conosce 657; esegui colors() per elencare tutti i nomi.
  • Codici esadecimali: col = "#2C7FB8", esattamente come in CSS.
  • Un vettore di colori: uno per punto, ed è così che colori i punti per gruppo: col = c("tomato", "steelblue")[group] dove group è un factor.

Simboli dei punti con pch, dimensioni con cex e lwd

Il cerchio vuoto predefinito va bene per esplorare, ma è poco chiaro in tutto ciò che mostri ad altri. pch (plotting character) sceglie il simbolo, numerato da 0 a 25:

plot(x, y, pch = 19)                     # solid circle - the usual choice
plot(x, y, pch = 17)                     # solid triangle
plot(x, y, pch = 21, col = "black",
     bg = "gold")                        # fillable circle: border + fill

Due numeri vale la pena memorizzarli. pch = 19 è il cerchio pieno usato dalla maggior parte dei grafici finiti. I simboli da pch = 21 a 25 sono quelli riempibili: col colora il bordo e bg l'interno, così ottieni punti a due colori.

Dimensioni e stile delle linee hanno le loro manopole:

  • cex scala la dimensione dei punti: cex = 1.5 li rende grandi una volta e mezza.
  • lwd imposta lo spessore delle linee per type = "l" o "b": lwd = 2 è una linea piena e leggibile.
  • lty imposta il motivo della linea: lty = 1 continua, 2 tratteggiata, 3 punteggiata.

Sovrapporre: points(), lines() e abline()

plot() inizia un grafico nuovo. Per disegnare sopra un grafico esistente, usa le sue compagne: aggiungono elementi al grafico corrente invece di sostituirlo.

plot(x, y, type = "l", lwd = 2, col = "steelblue",
     main = "Actual vs. target")

points(x, y, pch = 19, col = "steelblue")   # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40")  # add a second series, dashed
abline(h = 10, col = "tomato")              # horizontal reference line at y = 10

abline() è lo strumento per le linee di riferimento e ha tre modalità:

  • abline(h = 10): una linea orizzontale a un certo valore dell'asse verticale.
  • abline(v = 6): una linea verticale a un certo valore dell'asse orizzontale.
  • abline(a = 0, b = 1.5): una retta definita da intercetta a e pendenza b.

Il suo trucco migliore: passale un modello stimato e disegna per te la retta di regressione, con abline(lm(y ~ x)). Quella sola riga trasforma una nuvola di punti in un argomento; la guida al grafico a dispersione parte da qui.

Una regola da rispettare: i limiti degli assi vengono fissati dalla prima chiamata a plot(). Se una serie sovrapposta va oltre, viene tagliata: imposta xlim = e ylim = nel plot() originale con margini abbastanza ampi per tutto ciò che vuoi aggiungere.

Aggiungere una legenda

Quando un grafico ha più di una serie, ha bisogno di una legenda. legend() prende come primo argomento una parola chiave di posizione, cioè "topright", "topleft", "bottomright", "bottomleft", "top", "bottom" o "center" (sono stringhe letterali di R, quindi nel codice restano in inglese), poi le etichette e gli stili corrispondenti:

legend("topright",
       legend = c("Actual", "Target"),
       col    = c("steelblue", "gray40"),
       lty    = c(1, 2),
       pch    = c(19, NA),
       lwd    = 2)

I vettori col, lty e pch devono corrispondere a legend voce per voce: la prima etichetta riceve il primo colore, e così via. Usa NA per uno stile che non si applica a una serie (qui la linea dell'obiettivo non ha punti). La parola chiave fissa il riquadro in un angolo dell'area del grafico; scegli l'angolo che i tuoi dati lasciano vuoto.

Più pannelli e salvataggio su file

Per mostrare più grafici in una sola figura, imposta la griglia prima di disegnare: par(mfrow = c(1, 2)) divide il dispositivo in una riga e due colonne, e le due chiamate a plot() successive riempiono i pannelli in ordine. Ripristina con par(mfrow = c(1, 1)) quando hai finito, altrimenti i grafici successivi restano minuscoli.

Salvare su file funziona reindirizzando il disegno verso un dispositivo su file invece che verso lo schermo:

png("signups.png", width = 800, height = 600)

plot(x, y, type = "b", pch = 19, col = "steelblue",
     main = "Monthly signups", xlab = "Month", ylab = "Signups")

dev.off()

Tutto ciò che sta tra png() e dev.off() finisce nel file; a schermo non compare niente. Dimenticare dev.off() è il bug classico: il file resta bloccato e vuoto finché non chiudi il dispositivo. pdf(), jpeg() e svg() funzionano allo stesso modo.

Cosa ti porti a casa

  • plot(x, y) disegna subito; type = passa tra punti ("p"), linee ("l") ed entrambi ("b").
  • main, xlab, ylab etichettano il grafico; col accetta nomi di colori (657 in colors()) o codici esadecimali.
  • pch = 19 è il cerchio pieno; i simboli da pch = 21 a 25 separano il bordo (col) dal riempimento (bg); cex, lwd, lty controllano dimensioni e stile delle linee.
  • points(), lines() e abline() si sovrappongono al grafico esistente: abline(lm(y ~ x)) aggiunge una retta di regressione con una sola chiamata.
  • legend("topright", ...) etichetta le serie; png(...) + dev.off() salva su file.

Prossimo passo: l'istogramma, il grafico a una variabile che userai per primo quando incontri un nuovo dataset.

Domande frequenti

Come si fa un grafico in R?

Chiama plot(x, y) con due vettori numerici della stessa lunghezza. R apre una finestra grafica e disegna un punto per ogni coppia. Aggiungi type = "l" per un grafico a linee, main, xlab e ylab per i titoli e col per il colore.

Cosa significa pch in R?

pch (plotting character) sceglie il simbolo dei punti, numerato da 0 a 25. pch = 19 è il cerchio pieno che vuole la maggior parte delle persone. I simboli da 21 a 25 hanno un riempimento separato: col imposta il bordo e bg l'interno.

Come si aggiunge una legenda a un grafico in R?

Chiama legend() dopo il grafico, con una parola chiave di posizione come "topright" come primo argomento, un vettore legend = di etichette e i valori col, pch o lty corrispondenti a quelli usati nel grafico.

Come si salva un grafico R in un file?

Apri un dispositivo su file prima di disegnare e chiudilo dopo: png("myplot.png", width = 800, height = 600), poi il codice del grafico, poi dev.off(). A schermo non compare niente: il grafico finisce direttamente nel file.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA