Corso

R ti permette di creare diversi tipi di grafici, dai tipi di base come grafici di densità, dot plot, boxplot e scatter plot, a tipi più complessi dal punto di vista statistico come i probability plot.
Inoltre, ti consente di passare dalla produzione di grafici di base con poca personalizzazione alla creazione di grafici avanzati con personalizzazione completa, anche in combinazione con grafica interattiva. Tuttavia, non sempre otteniamo i risultati che vogliamo: Stack Overflow è pieno delle nostre domande sui grafici, con molti quesiti ricorrenti.
Per questo DataCamp ha deciso di riunire in un post tutte le domande frequenti e le loro risposte più votate.
Per fare pratica con la creazione di grafici in R, prova questo corso sulla visualizzazione dei dati in R.
Le 15 domande sui grafici in R
1. Come disegnare un grafico vuoto in R
Apri un nuovo riquadro di grafico
Puoi aprire un riquadro di grafico vuoto e attivare il device grafico in R come segue:Nota che le funzioni plot.new() e frame() definiscono un nuovo riquadro senza assi, etichette o contorni. Indicano che deve essere creato un nuovo grafico: si aprirà una nuova finestra grafica se non ne hai già una, altrimenti la finestra esistente viene preparata per il nuovo grafico. Puoi approfondire queste funzioni qui.
Imposta le dimensioni della finestra grafica
Puoi anche usare la funzione plot.window() per impostare le dimensioni orizzontali e verticali del grafico vuoto appena creato:
plot.new()
pWidth = 3
pHeight = 2
plot.window(c(0,pWidth),
c(0,pHeight))
Disegna un vero grafico vuoto
Puoi disegnare un grafico vuoto con la funzione plot(). Inoltre, riempi il grafico vuoto con assi, etichette degli assi e un titolo con le funzioni mtext() e title().
Passi le coordinate (5,5) al grafico, ma non mostri alcun tracciamento impostando l’argomento type su "n".
Consiglio: prova a impostare questo argomento su "p" o "b" e guarda cosa succede!
Inoltre, non annoti il grafico, ma imposti i limiti da 0 a 10 su entrambi gli assi.
Infine, puoi scegliere di disegnare un riquadro attorno al grafico con la funzione box() e aggiungere alcuni punti con la funzione points():
Nota che puoi inserire le coordinate x e y in vettori per plottare più punti alla volta. L’argomento pch ti permette di selezionare un simbolo, mentre l’argomento cex ha un valore che indica di quanto ridimensionare testo e simboli rispetto al default.
Consiglio: se vuoi vedere quale numero corrisponde a quale simbolo, clicca qui.
2. Come impostare le etichette degli assi e il titolo dei grafici in R
Gli assi dei grafici in R sono tra gli argomenti più popolari nelle domande su Stack Overflow; le domande sono molto varie.
Continua a leggere per scoprire quali tipi di domande DataCamp ha trovato più comuni!
Assegnare nomi agli assi (con apici o pedici) e aggiungere un titolo a un grafico in R?
Puoi facilmente nominare gli assi e aggiungere un titolo per rendere il tuo grafico in R più specifico e comprensibile per chi lo guarda.
Puoi farlo aggiungendo gli argomenti main per il titolo principale, sub per il sottotitolo, xlab per l’etichetta dell’asse x e ylab per l’etichetta dell’asse y.
Nota che se vuoi un titolo con apici o pedici, puoi aggiungerli nell’argomento main della funzione plot(). Assicurati di usare expression() e il simbolo ^ per gli apici o le parentesi quadre per i pedici.
Provalo nel blocco DataCamp Light qui sotto:
Puoi anche assicurarti di avere lettere greche nelle etichette degli assi usando codice che combina le funzioni expression() e paste(). Esegui il seguente codice:
Regolare l’aspetto delle etichette degli assi
Per regolare l’aspetto delle etichette degli assi x e y puoi usare gli argomenticol.lab e cex.lab. Il primo cambia il colore delle etichette degli assi, mentre il secondo ne determina la dimensione rispetto all’impostazione (predefinita) di cex.
Per maggiori informazioni su questi argomenti, vai a questa pagina.
Rimuovere etichette degli assi e annotazioni
Se vuoi eliminare i valori sugli assi di un grafico, puoi aggiungere gli argomenti xaxt e yaxt impostati a "n". Questi argomenti specificano il tipo di asse da tracciare. Se inserisci "n", come nel comando sotto, sopprimi il tracciamento dell’asse.
Nota che assegnando qualsiasi altro carattere agli argomenti xaxt e yaxt, gli assi x e y verranno tracciati.
ann e impostarlo su FALSE per rimuovere qualsiasi etichetta degli assi.
Consiglio: non è l’informazione che cercavi? Vai a questa pagina.
Ruotare le etichette degli assi
Puoi aggiungere l’argomentolas alla funzione axis() per ruotare i numeri corrispondenti a ciascun asse:
Nota come ciò richieda di aggiungere un argomento alla funzione plot() che di fatto dice di non plottare ancora gli assi: questo è il compito delle due chiamate a axis() che seguono.
L’argomento las può assumere quattro valori. A seconda dell’opzione scelta, la posizione dell’etichetta cambia: con 0 l’etichetta è sempre parallela all’asse (default); con 1 è orizzontale; scegli 2 per averla perpendicolare all’asse e 3 per metterla verticalmente.
Ma non è tutto. Se vuoi conoscere altre possibilità della funzione axis(), continua a leggere!
Spostare le etichette degli assi
Vuoi spostare le etichette degli assi?
Nessun problema, puoi farlo con la funzione axis(); come avrai già notato in questo tutorial, questa funzione ti permette prima di specificare dove disegnare gli assi. Diciamo che vuoi disegnare l’asse x sopra l’area del grafico e l’asse y a destra.
Ricorda che passando 1 o 2 a axis(), l’asse viene disegnato rispettivamente in basso e a sinistra dell’area del grafico. Scorri un po’ in su per vedere un esempio nel codice precedente!
3 e 4 alla funzione axis():
Come vedi, inizialmente plotti x e y, ma senza assi e annotazioni. Poi aggiungi gli assi che vuoi vedere e specifichi la loro posizione rispetto al grafico.
La flessibilità che la funzione axis() ti offre continua a crescere! Guarda la prossima domanda frequente per vedere cos’altro puoi risolvere con questa funzione base di R.
Consiglio: vai all’ultima domanda per vedere come spostare il testo nelle etichette degli assi con hjust e vjust!
3. Come aggiungere e modificare la spaziatura delle tacche nel grafico in R
Come modificare la spaziatura delle tacche nel grafico in R
Lasciare che sia R a determinare le tacche del tuo grafico può essere fastidioso e potresti volerle regolare.
1. Usare la funzione axis() per definire le tacche del grafico
Come vedi, prima definisci la posizione delle tacche e le loro etichette. Poi disegni il grafico specificando il tipo di asse x come "n", sopprimendo il tracciamento dell’asse.
Poi inizia il lavoro vero e proprio:
- La funzione
axis()permette di specificare il lato del grafico su cui tracciare l’asse. In questo caso l’argomento vale1, che indica il lato inferiore. Con2sarebbe a sinistra, con3in alto e con4a destra; - L’argomento
atindica i punti in cui disegnare le tacche. Qui usi le posizioni definite inV1; - Allo stesso modo, le
labelsche vuoi usare sono quelle specificate inV2; - Regoli la direzione delle tacche tramite
tck: con un valore negativo specifichi che le tacche devono apparire sotto l’asse.
Consiglio: prova a passare un valore positivo a tck e guarda cosa succede!
tcl e l’aspetto delle etichette delle tacche è controllato con cex.axis, col.axis e font.axis.
2. Usare altre funzioni per definire le tacche del grafico
Puoi anche usare le funzioni par() e plot() per definire le posizioni delle tacche e il numero di intervalli tra esse.
xaxp a cui passi la posizione delle tacche poste agli estremi dell’asse x, seguita dal numero di intervalli tra le tacche:
Puoi anche eseguire il seguente codice per ottenere sostanzialmente lo stesso risultato:
Nota che questo funziona solo se non usi una scala logaritmica. Se le coordinate log sono impostate a vero, cioè se par(xlog=T), i tre valori passati a xaxp hanno un significato diverso: per un intervallo piccolo, n è negativo. Altrimenti, n è in 1:3 e specifica un numero di caso, e x1 e x2 sono la potenza di 10 più bassa e più alta all’interno delle coordinate utente, 10 ^ par(“usr”)[1:2].
In questo esempio usi la funzione par(): imposti xlog su TRUE e aggiungi l’argomento xaxp per fornire le coordinate delle tacche estreme e il numero di intervalli tra di esse. In questo caso imposti il valore minimo a 1, il massimo a 4 e indichi che gli intervalli tra le tacche devono essere 3.
Poi plotti x e y, aggiungendo l’argomento log per specificare se plottare l’asse x, l’asse y o entrambi su scala logaritmica. Puoi passare i valori "x", "y" e "xy" a questo argomento.
Come aggiungere tacche minori a un grafico in R
Puoi aggiungere rapidamente tacche minori al grafico con la funzioneminor.tick() del pacchetto Hmisc:
- L’argomento
nxti permette di specificare il numero di intervalli in cui vuoi dividere l’area tra le tacche principali sull’asse. Se gli passi il valore1, le tacche minori saranno soppresse; nyfa la stessa cosa dinx, ma per l’asse y;tick.ratioindica il rapporto tra la lunghezza delle tacche minori e quella delle tacche principali. La lunghezza delle tacche principali è recuperata dapar(tck=x).
4. Come creare due assi X o Y diversi
La prima opzione è creare un primo grafico ed eseguire la funzionepar() con l’argomento new impostato su TRUE per evitare che R pulisca il device grafico:
Poi crei il secondo grafico con plot(). Passi i dati e ti assicuri di regolare alcuni argomenti come type, axes, bty, xlab e ylab:
type: puoi passarelper disegnare linee;axesè impostato aFALSEcosì non vengono disegnati assi;btysopprime il riquadro attorno al grafico;xlabè impostato a stringa vuota, quindi nessuna etichetta sull’asse x, eylabè anch’esso vuoto, quindi nessuna etichetta sull’asse y.
Guarda tutto nel seguente blocco DataCamp Light. Nota che il codice sopra è già stato caricato nell’ambiente di lavoro. Puoi verificarlo usando la Console R a destra del riquadro DataCamp Light:
Ora è il momento di aggiungere un asse e scrivere testo nei margini del grafico con axis() e mtext() rispettivamente.
Puoi aggiungere un nuovo asse sul lato destro aggiungendo l’argomento side con valore 4 alla funzione axis(). Poi specifichi l’argomento at per indicare i punti in cui disegnare le tacche. In questo caso, calcoli una sequenza di valori “arrotondati” equidistanti che coprono l’intervallo dei valori in z con la funzione pretty(). Questo garantisce che tu abbia effettivamente i numeri dell’asse y del secondo grafico, che hai chiamato z.
Prova tutto qui sotto:
Nota che l’argomento side può assumere quattro valori: 1 per posizionare il testo in basso, 2 a sinistra, 3 in alto e 4 a destra. L’argomento line indica su quale linea del margine inizia il testo.
Il risultato finale del tuo codice sarà così:
set.seed(101)
x <- 1:10
y <- rnorm(10)
z <- runif(10, min=1000, max=10000)
plot(x, y)
par(new = TRUE)
plot(x,
z,
type = "l",
axes = FALSE,
bty = "n",
xlab = "",
ylab = "")
axis(side=4,
at = pretty(range(z)))
mtext("z",
side=4,
line=3)
Come esercizio aggiuntivo, prova a costruire un grafico in R con due diversi assi x! Fallo nel blocco DataCamp Light qui sotto:
Nota che, sebbene tu possa fare tutto questo manualmente con le funzioni di base plot(), axis() e mtext(), esistono pacchetti che automatizzano il tutto: la funzione twoord.plot() del pacchetto plotrix e la funzione doubleYScale() del pacchetto latticeExtra sono piuttosto utili e forse più rapide se vuoi ottenere lo stesso risultato:
Nota che l’esempio sopra è realizzato con questo dataset. Se hai dubbi sull’import dei dati o sulla funzione read.table(), dai un’occhiata al tutorial di DataCamp su come importare dati in R.
5. Come aggiungere o modificare la legenda del grafico in R
Aggiungere e modificare la legenda con R base
Puoi aggiungere facilmente una legenda al tuo grafico in R con la funzionelegend():
Nota che gli argomenti pt.cex e title.cex descritti nella documentazione di legend() non funzionano davvero. Ci sono alcuni workaround:
- Metti il titolo o le etichette della legenda in un font diverso aggiungendo l’argomento
text.fontalegend():
- Disegna la legenda due volte con valori dell’argomento
cexdiversi
Consiglio: se ti interessa conoscere meglio i colori che puoi usare in R, consulta questo utilissimo PDF.
Come aggiungere e modificare la legenda e le etichette in ggplot2
Aggiungere una legenda al tuo grafico ggplot2 è abbastanza semplice. Puoi eseguire quanto segue:
E otterrai una legenda predefinita. Ma, nella maggior parte dei casi, vorrai regolare ulteriormente l’aspetto della legenda.
Ci sono due modi per cambiare titolo e etichette della legenda in ggplot2:
- Dire alla scala di usare un titolo e delle etichette diverse
colour o shape, o altre estetiche, devi cambiare nomi ed etichette tramite le funzioni scale_color_discrete() e scale_shape_discrete() rispettivamente:
Nota che il grafico appare un po’ compresso nel tab Plot del blocco DataCamp Light, ma questo non sarebbe un problema eseguendo il codice in RStudio.
Nota che puoi creare due legende se aggiungi l’argomento shape nella funzione geom_point() e negli argomenti labels!
Se vuoi spostare la legenda in basso, puoi specificare legend.position come "bottom". L’argomento legend.justification, invece, ti consente di posizionare la legenda all’interno del grafico.
Consiglio: scopri tutti i tipi di scale che puoi usare per dire a ggplot di utilizzare altri nomi ed etichette qui.
- Modificare il data frame in modo che il fattore abbia la forma desiderata
Potrai poi usare i nuovi nomi dei fattori per creare il grafico in ggplot2, evitando la “seccatura” di cambiare nomi ed etichette con righe di codice extra nel plotting.
Consiglio: per una cheat sheet completa su ggplot2, vai qui.
6. Come disegnare una griglia nel grafico in R
Disegnare una griglia con R base
Per alcuni scopi potresti trovare necessario includere una griglia nel grafico. Puoi aggiungerla facilmente usando la funzionegrid():
Disegnare una griglia in un grafico R con ggplot2
Il blocco di codice seguente mostra come assicurarti che il grafico abbia una griglia con il pacchetto ggplot2. Nota che i dati chol sono già stati caricati e che i passaggi di manipolazione visti sopra sono stati applicati.
Se non sei sicuro di come appaiano i dati, stampa le prime righe del data frame nella Console R del blocco DataCamp Light:
Consiglio: se non vuoi avere le linee della griglia minori, passa element_blank() a panel.grid.minor.
Se vuoi riempire lo sfondo con un colore, aggiungi panel.background = element_rect(fill = "navy") al tuo codice. Puoi vedere come si fa nel blocco DataCamp Light qui sotto. I dati chol sono stati caricati e leggermente manipolati, come prima. Provalo!
7. Come disegnare un grafico con un PNG come sfondo
Puoi disegnare rapidamente un grafico con un .png come sfondo con l’aiuto del pacchetto png. Installa il pacchetto se necessario, attivalo nello spazio di lavoro con library() e puoi iniziare a plottare!
Per prima cosa, vuoi caricare l’immagine. Usa la funzione readPNG() per specificare il percorso dell’immagine!
consiglio: puoi controllare e cambiare la tua directory di lavoro eseguendo i seguenti comandi.
Se l’immagine è salvata nella directory di lavoro, puoi semplicemente specificare readPNG("picture.png") invece di passare l’intero percorso.
Poi imposti l’area del grafico e richiami la funzione par() per impostare i parametri grafici in rasterImage(). Usi l’argomento usr per definire gli estremi delle coordinate utente della regione di disegno. In questo caso imposti 1, 3, 2 e 4.
Successivamente, disegni una griglia e aggiungi alcune linee:
install.packages("png")
library(png)
image <- readPNG("<path to your picture>")
getwd()
setwd("<path to a folder>")
plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y")
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
grid()
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")
Questo può darti il seguente risultato se usi il logo di DataCamp:
library(png)
image <- readPNG("datacamp.png")
plot(1:2, type="n", main="Plotting Over an Image", xlab="x", ylab="y", asp=1)
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1.5, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")

Nota che devi fornire un file .png come input a readPNG() e che, se vuoi, puoi seguire la stessa procedura per lavorare con immagini jpg. Naturalmente, in tal caso devi caricare la libreria jpeg!
Nota che in questo esempio prima scarichi un’immagine dal web da usare nel grafico, ma puoi anche semplicemente salvare un’immagine e passare il percorso del file a readJPEG() per usarla nel plotting.
Nota anche che questo esempio è tratto dall’R Graph Gallery, che offre un sacco di ispirazione per la visualizzazione dei dati in R, dato che puoi trovare in un unico posto sia il codice che i rendering! È l’ideale se cerchi ispirazione o un modo rapido per trovare il codice che ti serve per i tuoi grafici!
8. Come regolare la dimensione dei punti in un grafico in R
Regolare la dimensione dei punti con R base
Per regolare la dimensione dei punti con R base, puoi semplicemente usare l’argomentocex:
symbols():
I cerchi di questo grafico ricevono i valori di df$x3 come raggi, mentre l’argomento inches controlla la dimensione dei simboli. Quando questo argomento riceve un numero positivo, i simboli sono scalati in modo che la dimensione massima sia questa (in pollici).
Regolare la dimensione dei punti con ggplot2
In questo caso, vorrai regolare la dimensione dei punti nello scatterplot. Puoi farlo con l’argomento size. Nota che i dati chol sono già stati caricati per te:
Nota che puoi anche passare l’argomento size alla funzione geom_point():
ggplot(chol,
aes(x=chol$WEIGHT, y=chol$HEIGHT)) +
geom_point(size = 2)
Otterrai lo stesso risultato, ma non fidarti solo della parola! Prova a sostituire l’ultimo pezzo di codice nel blocco DataCamp Light con questo.
9. Come adattare una curva di smoothing ai tuoi dati in R
La funzione loess() è probabilmente la soluzione preferita di ogni programmatore R per questo tipo di domanda. In pratica “adatta una superficie polinomiale determinata da uno o più predittori numerici, usando un fitting locale”.
In breve, hai i dati e usi la funzione loess(), in cui correli y e x. In questo modo specifichi la risposta numerica e da uno a quattro predittori numerici.
x e y e tracci le linee nel grafico originale dove hai predetto i valori di lo:
10. Come aggiungere barre di errore in un grafico in R
Disegnare barre di errore con R base
La cattiva notizia: R non disegna barre di errore così com’è. La buona notizia: puoi comunque disegnarle senza installare pacchetti extra!
Per prima cosa, dovrai definire la seguente funzione per calcolare alcune statistiche riassuntive del tuo data frame:
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE) {
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE) {
if (na.rm) sum(!is.na(x))
else length(x)
}
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col) {
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
},
measurevar
)
# Rename the "mean" column
datac <- rename(datac, c("mean" = measurevar))
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- qt(conf.interval/2 + .5, datac$N-1)
datac$ci <- datac$se * ciMult
return(datac)
}
Nota che la definizione della funzione proviene da questa fonte ed è disponibile anche tramite la libreria Rmisc.
Poi puoi usarla per calcolare alcune statistiche dei dati chol, che sono già stati caricati per te. Successivamente puoi usare questi risultati per creare il grafico.
Assicurati di ispezionare i dati prima di iniziare l’esercizio!
Se vuoi approfondire tutti gli argomenti che arrows() può accettare, vai qui.
Disegnare barre di errore con ggplot2
Barre di errore che rappresentano l’errore standard della media
Prima riassumi i dati con la funzione summarySE() del pacchetto Rmisc o usa la funzione definita sopra. Poi puoi usare il data frame risultante per plottare alcune variabili, disegnando contemporaneamente le barre di errore, per esempio l’errore standard della media.
position_dodge():
Consiglio: se ottieni un errore del tipo “geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?”, di solito serve regolare l’estetica del gruppo.
Barre di errore che rappresentano intervalli di confidenza
Proseguendo dal riepilogo dei dati creato con la funzione summarySE() della libreria Rmisc o dalla sezione precedente, puoi anche disegnare barre di errore che rappresentano gli intervalli di confidenza. In questo caso, vengono plottate barre di errore al 95%.
Nota come il colore delle barre di errore ora sia impostato su nero con l’argomento colour.
Barre di errore che rappresentano la deviazione standard
Infine, puoi anche usare i risultati della funzione summarySE() del pacchetto Rmisc o della definizione copiata nelle sezioni precedenti per plottare barre di errore che rappresentano la deviazione standard.
In particolare, dovresti solo regolare gli argomenti ymin e ymax che passi a geom_errorbar():
Super consiglio*: dai un’occhiata anche a questo per esempi più dettagliati su come plottare medie e barre di errore.
11. Come salvare un grafico come immagine sul disco
Puoi usare dev.copy() per copiare il grafico, creato nel device grafico corrente, nel device o nella cartella da te specificati.
x <- seq(0,2*pi,0.1)
y <- sin(x)
plot(x,y)
dev.copy(jpeg,
filename="<path to your file/name.jpg>");
dev.off();
(x)
(y)
12. Come affiancare due grafici in R
Affiancare due grafici con R base
Puoi farlo con comandi base di R:Aggiungendo la funzione par() con l’argomento mfrow, specifichi un vettore che in questo caso contiene 1 e 2: tutte le figure verranno disegnate in una griglia 1×2 sul device per righe (mfrow).
In altre parole, i boxplot sopra verranno stampati su un’unica riga in due colonne.
Affiancare due grafici usando ggplot2
Se vuoi affiancare i grafici e non vuoi specificare limiti, puoi considerare l’uso del pacchetto ggplot2 per disegnare i grafici fianco a fianco.
I tuoi dati chol e la funzione summarySE() sono stati caricati. Ispezionali nella Console R se non sei sicuro di come appaiono:
Nota come aggiungi semplicemente la funzione facet_grid() per indicare che vuoi due grafici affiancati. L’elemento usato per determinare come vengono disegnati i grafici è MORT, come puoi vedere sopra!
Affiancare più grafici con gridExtra
Per stampare grafici affiancati, puoi usare il pacchetto gridExtra; assicurati di avere il pacchetto installato e attivo nello spazio di lavoro e poi esegui qualcosa del genere:
Nota come anche qui decidi come appariranno i due grafici grazie all’argomento ncol.
Affiancare più grafici con lattice
Proprio come con il pacchetto ggplot2, anche il pacchetto lattice non richiede di specificare limiti o come vuoi che i grafici siano affiancati.
Invece, usi bwplot() per creare trellis graph del tipo box plot. I trellis graph mostrano una variabile o la relazione tra variabili, condizionata da una o più altre variabili.
In questo caso, se usi il dataset chol (che puoi trovare qui o caricare con la funzione read.table()), mostri la variabile CHOL separatamente per ogni combinazione dei livelli dei fattori SMOKE e MORT.
Nota che i dati sono stati caricati per te nel blocco DataCamp Light qui sotto!
Affiancare grafici con gridBase
Un altro modo per affiancare due grafici è usare il pacchetto gridBase, che si occupa dell’“integrazione della grafica base e grid”. È utile quando vuoi mettere affiancati un grafico base di R e un ggplot.
Procedi così: prima attivi i pacchetti necessari nello spazio di lavoro. In questo caso ti servono gridBase per affiancare i due grafici e grid e ggplot2 per creare i grafici:
library(grid)
library(gridBase)
library(ggplot2)
plot.new()
gl <- grid.layout(nrow=1,
ncol=2)
vp.1 <- viewport(layout.pos.col=1,
layout.pos.row=1)
vp.2 <- viewport(layout.pos.col=2,
layout.pos.row=1)
pushViewport(viewport(layout=gl))
pushViewport(vp.1)
par(new=TRUE,
fig=gridFIG())
plot(x = 1:10,
y = 10:1)
popViewport()
pushViewport(vp.2)
ggplotted <- qplot(x=1:10,y=10:1, 'point')
print(ggplotted, newpage = FALSE)
popViewport(1)
Se vuoi o ne hai bisogno, puoi iniziare con un grafico vuoto per poi impostare il layout. Nota che, dato che vuoi che i due grafici siano generati uno accanto all’altro, questo richiede una griglia con una riga e due colonne.
Ora vuoi riempire le celle della griglia con dei viewport. Questi definiscono regioni rettangolari nel device grafico con l’aiuto di coordinate all’interno di tali regioni. In questo caso, è molto più comodo usare le specifiche della griglia descritte sopra piuttosto che vere coordinate x o y. Ecco perché dovresti usare gli argomenti layout.pos.col e layout.pos.row.
Poiché i viewport sono solo descrizioni o definizioni, questi oggetti devono essere pushati nell’albero dei viewport prima che si veda qualche effetto nel disegno. Usa la funzione pushViewport() per farlo.
Ora puoi procedere aggiungendo la prima regione rettangolare vp.1 all’albero dei ViewPort, dopo di che dici a R con gridFig() di disegnare un grafico base all’interno di un viewport grid (cioè vp.1). L’argomento fig normalmente prende le coordinate della regione figura nella regione display del device. Qui usi l’argomento fig per iniziare un nuovo grafico, aggiungendolo a un grafico esistente impostando anche new = TRUE nella funzione par(). Tracci il grafico base e rimuovi il viewport dall’albero:
plot.new()
gl <- grid.layout(nrow=1,
ncol=2)
vp.1 <- viewport(layout.pos.col=1,
layout.pos.row=1)
vp.2 <- viewport(layout.pos.col=2,
layout.pos.row=1)
pushViewport(viewport(layout=gl))
pushViewport(vp.1)
par(new=TRUE,
fig=gridFIG())
plot(x = 1:10,
y = 10:1)
popViewport()
Dato che vuoi che i due grafici vengano generati affiancati, vuoi metterne uno nella prima colonna e l’altro nella seconda, entrambi sulla prima riga.
Nota che la funzione pushViewport() accetta la funzione viewport(), che a sua volta contiene l’argomento layout. Quest’ultimo indica “un oggetto grid layout che suddivide il viewport in sotto-regioni”.
Nota anche che puoi specificare nella funzione popViewport() un argomento per indicare quanti viewport vuoi rimuovere dall’albero. Se questo valore è 0, indica che vuoi rimuovere i viewport fino al root. Il valore predefinito è 1.
Procedi ad aggiungere la seconda regione rettangolare vp.2 all’albero dei ViewPort. Puoi quindi creare il ggplot e rimuovere il viewport dall’albero.
pushViewport(vp.2)
ggplotted <- qplot(x=1:10,
y=10:1,
'point')
print(ggplotted,
newpage = FALSE)
popViewport(1)
Nota che devi stampare l’oggetto grafico creato da qplot() per disegnarlo effettivamente e vederlo. Allo stesso tempo, devi specificare newpage = FALSE, altrimenti vedrai solo il qplot()…
Inoltre, ricorda che il valore predefinito dei viewport da rimuovere nella funzione popViewport() è 1. Questo rende un po’ ridondante mettere popViewport(1) nel codice.
13. Come tracciare più linee o punti
Usare R base per tracciare più linee o punti nello stesso grafico
Per plottare due o più grafici nello stesso plot, inizi creando un grafico base tipico in R. Poi aggiungi altre linee o punti al grafico. In questo caso aggiungi linee, quindi definirai più assi y:In seguito, vedrai che queste linee sono disegnate con la funzione lines().
Questo dà il seguente risultato:
Nota che la funzione lines() accetta tre argomenti: gli assi x e y che vuoi plottare e il colore (argomento col) con cui vuoi tracciarli. Puoi includere anche le seguenti caratteristiche:
| Caratteristica | Argomento | Input |
|---|---|---|
| Tipo di linea | lty |
Intero o stringa |
| Larghezza linea | lwd |
Intero |
| Tipo di punto | pch |
Intero o singolo carattere |
| Stile estremità linea | lend |
Intero o stringa |
| Stile giunzione linea | ljoin |
Intero o stringa |
| Limite mitra linea | lmitre |
Intero < 1 |
Ecco alcuni esempi:
lines(x,y2,col="green", lty = 2, lwd = 3)
lines(x,y2,col="green", lty = 5, lwd = 2, pch = 2)
lines(x,y3,col="black", lty = 3, lwd = 5, pch = 3, lend = 0, ljoin = 2)
lines(x,y4,col="blue", lty = 1, lwd = 2, pch = 3, lend = 2, ljoin = 1, lmitre = 2)
Nota che l’argomento pch non funziona granché con la funzione lines() ed è meglio usarlo con points().
points():
Puoi aggiungere gli stessi argomenti alla funzione points() che hai usato con lines() e che sono elencati sopra. Ci sono però alcune aggiunte:
| Caratteristica | Argomento | Input |
|---|---|---|
| Colore di sfondo (riempimento) | bg |
Solo se pch = 21:25 |
| Espansione carattere (o simbolo) | cex |
Intero |
Esempi di codice per questi argomenti:
points(x,y4,col="blue", pch=21, bg = "red")
points(x, y5, col="yellow", pch = 5, bg = "blue")
Se incorpori queste modifiche nel grafico visto sopra, otterrai il seguente risultato:
Usare ggplot2 per tracciare più linee o punti in un solo grafico
Il pacchetto ggplot2 ti consente comodamente di creare livelli, permettendoti di plottare due o più grafici nello stesso plot senza difficoltà e con facilità:
14. Come fissare il rapporto d’aspetto per i tuoi grafici in R
Se vuoi salvare un grafico di R come immagine in cui gli assi siano proporzionali alla loro dimensione, significa che vuoi fissare il rapporto d’aspetto.
Regolare il rapporto d’aspetto con R base
Quando lavori con comandi base di R per produrre i grafici, puoi aggiungere l’argomentoasp della funzione plot(), completato con un intero, per impostare il rapporto d’aspetto. Guarda questo primo esempio senza rapporto d’aspetto definito:
asp:
Regolare il rapporto d’aspetto per i grafici con ggplot2
Per fissare il rapporto d’aspetto dei grafici ggplot2, aggiungi la funzione coord_fixed(), che fornisce un “sistema di coordinate a scala fissa [che] forza un rapporto specifico tra la rappresentazione fisica delle unità di dati sugli assi”.
In altre parole, questa funzione ti permette di specificare un numero di unità sull’asse y equivalente a un’unità sull’asse x. Il default è sempre 1, il che significa che un’unità sull’asse x ha la stessa lunghezza di un’unità sull’asse y. Se il rapporto è maggiore, le unità sull’asse y sono più lunghe di quelle sull’asse x e viceversa.
Confronta i seguenti esempi:Regolare il rapporto d’aspetto con MASS
Puoi anche considerare l’uso del pacchetto MASS, che comprende la funzione eqscplot(): produce grafici con scale geometricamente uguali. Lo fa per gli scatterplot:
Consiglio: potresti fare bene ad aprire un nuovo riquadro di grafico prima di eseguire il codice sopra!
Nota che puoi passare argomenti aggiuntivi alla funzione eqscplot() per personalizzare l’aspetto dello scatterplot!
15. Qual è la funzione di hjust e vjust in ggplot2
In sostanza, usi questi argomenti quando vuoi impostare la posizione del testo nel tuo ggplot. hjust ti permette di definire l’allineamento orizzontale, mentre vjust controlla l’allineamento verticale. Vedi la documentazione di geom_text() per maggiori informazioni.
Per mostrare cosa succede esattamente, puoi creare un data frame da tutte le combinazioni di fattori con la funzione expand.grid():
hjustvjust <- expand.grid(hjust=c(0, 0.5, 1),
vjust=c(0, 0.5, 1),
angle=c(0, 45, 90),
text="Text"
)
Nota che hjust e vjust possono assumere solo valori tra 0 e 1.
0significa che il testo è allineato a sinistra; in altre parole, tutto il testo è allineato al margine sinistro. È quello che di solito vedi lavorando con editor di testo come Microsoft Word.1significa che il testo è allineato a destra: tutto il testo è allineato al margine destro.
ggplot(), definendo gli assi x e y come hjust e vjust rispettivamente:
Nota anche come gli argomenti hjust e vjust vengano aggiunti a geom_text(), che si occupa delle annotazioni testuali del grafico.
Nel grafico sopra vedi che il testo nel punto (0,0) è allineato a sinistra, sia orizzontalmente che verticalmente. D’altra parte, il testo nel punto (1,1) è allineato a destra sia in direzione orizzontale che verticale. Il punto (0,5; 0,5) è al centro: non è davvero allineato né a sinistra né a destra per quanto riguarda le direzioni orizzontale e verticale.
Nota che quando questi argomenti sono definiti per cambiare il testo degli assi, l’allineamento orizzontale per il testo degli assi è definito in relazione all’intero grafico, non all’asse x!vjust per cambiare il testo degli assi e come influisce sulla rappresentazione del grafico:
Per andare all’ottima discussione originale, da cui è stato adattato il codice sopra, clicca qui.
Come ultima nota…
Vale la pena dare un’occhiata a questo articolo, che elenca 10 consigli per far rendere al meglio la tua grafica in R!
Inoltre, se vuoi saperne di più sulla visualizzazione dei dati, potresti considerare il corso interattivo di DataCamp su data visualization con ggvis, tenuto da Garrett Grolemund, autore di Hands on Programming with R e Data Science with R.
Oppure potrebbe interessarti il nostro corso sui report con R Markdown!