Vai al contenuto principale

15 domande che tutti gli utenti R hanno sui grafici

Esistono diversi tipi di grafici in R, dai tipi di base a quelli più complessi. Qui scopriamo come crearli.
Aggiornato 7 ott 2026  · 15 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity
banner della libreria di corsi R di datacamp

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwbG90Lm5ldygpXG5cbiMgT3IgdHJ5IG91dCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgXG4jIGZyYW1lKCkifQ==

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.

  • x11() può anche aprire un nuovo device in R per l’X Window System (versione 11)!
  • quartz() avvia un driver del device grafico per macOS.

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().

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERyYXcgYW4gZW1wdHkgcGxvdFxucGxvdCg1LCBcbiAgICAgNSwgXG4gICAgIHR5cGU9XCJuXCIsIFxuICAgICBheGVzPUZBTFNFLCBcbiAgICAgYW5uPUZBTFNFLCBcbiAgICAgeGxpbT1jKDAsIDEwKSwgXG4gICAgIHlsaW0gPSBjKDAsMTApKVxuXG4jIEFkZCB0ZXh0IHRvIHRoZSB4LWF4aXNcbm10ZXh0KFwieC1heGlzXCIsIFxuICAgICAgc2lkZT0xKVxuXG4jIEFkZCB0ZXh0IHRvIHRoZSB5LWF4aXNcbm10ZXh0KFwieS1heGlzXCIsXG4gICAgICBzaWRlPTIpIFxuXG4jIEFkZCBhIHRpdGxlXG50aXRsZShcIkFuIFIgUGxvdFwiKSJ9

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():

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERyYXcgYW4gZW1wdHkgcGxvdFxucGxvdCg1LCBcbiAgICAgNSwgXG4gICAgIHR5cGU9XCJuXCIsIFxuICAgICBheGVzPUZBTFNFLCBcbiAgICAgYW5uPUZBTFNFLCBcbiAgICAgeGxpbT1jKDAsIDEwKSwgXG4gICAgIHlsaW0gPSBjKDAsMTApKVxuXG4jIEFkZCB0ZXh0IHRvIHRoZSB4LWF4aXNcbm10ZXh0KFwieC1heGlzXCIsIFxuICAgICAgc2lkZT0xKVxuXG4jIEFkZCB0ZXh0IHRvIHRoZSB5LWF4aXNcbm10ZXh0KFwieS1heGlzXCIsXG4gICAgICBzaWRlPTIpIFxuXG4jIEFkZCBhIHRpdGxlXG50aXRsZShcIkFuIFIgUGxvdFwiKVxuXG4jRHJhdyBhIGJveFxuYm94KClcblxuI1B1dCAocmVkKSBwb2ludCBpbiB0aGUgcGxvdCBhdCAoNSw1KVxucG9pbnRzKDUsXG4gICAgICAgNSwgXG4gICAgICAgY29sPVwicmVkXCIpIFxucG9pbnRzKDUsIFxuICAgICAgIDcsIFxuICAgICAgIGNvbD1cIm9yYW5nZVwiLCBcbiAgICAgICBwY2g9MywgXG4gICAgICAgY2V4PTIpXG5wb2ludHMoYygwLCAwLCAxKSwgXG4gICAgICAgYygyLCA0LCA2KSwgXG4gICAgICAgY29sPVwiZ3JlZW5cIiwgXG4gICAgICAgcGNoPTQpIn0=

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:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLDIqcGksMC4xKVxueSA8LSBzaW4oeClcblxuIyBQbG90IHRoZSBkYXRhXG5wbG90KHgsXG4gICAgIHksXG4gICAgIG1haW49ZXhwcmVzc2lvbihcIm1haW4gdGl0bGVcIl4yKSwgXG4gICAgIHN1Yj1leHByZXNzaW9uKFwic3ViLXRpdGxlXCJbMl0pLCBcbiAgICAgeGxhYj1cIngtYXhpcyBsYWJlbFwiLCBcbiAgICAgeWxhYj1cInktYXhpcyBsYWJlbFwiKSJ9

Puoi anche assicurarti di avere lettere greche nelle etichette degli assi usando codice che combina le funzioni expression() e paste(). Esegui il seguente codice:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLDIqcGksMC4xKVxueSA8LSBzaW4oeClcblxuIyBQbG90IHRoZSBkYXRhXG5wbG90KHgsXG4gICAgIHksXG4gICAgIHhsYWIgPSBleHByZXNzaW9uKHBhc3RlKFwiR3JlZWsgbGV0dGVyIFwiLCBwaGkpKSxcbiAgICAgeWxhYiA9IGV4cHJlc3Npb24ocGFzdGUoXCJHcmVlayBsZXR0ZXIgXCIsbXUpKSkifQ==

Regolare l’aspetto delle etichette degli assi

Per regolare l’aspetto delle etichette degli assi x e y puoi usare gli argomenti col.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.
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLDIqcGksMC4xKVxueSA8LSBzaW4oeClcblxuIyBQbG90IHRoZSBkYXRhXG5wbG90KHgsXG4gICAgIHksXG4gICAgIG1haW49ZXhwcmVzc2lvbihcIm1haW4gdGl0bGVcIl4yKSwgXG4gICAgIHN1Yj1leHByZXNzaW9uKFwic3ViLXRpdGxlXCJbMl0pLCBcbiAgICAgeGxhYj1cIngtYXhpcyBsYWJlbFwiLCBcbiAgICAgeWxhYj1cInktYXhpcyBsYWJlbFwiLFxuICAgICBjb2wubGFiPVwiYmx1ZVwiLFxuICAgICBjZXgubGFiPTAuNzUpIn0=

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.

Successivamente, puoi aggiungere l’argomento di annotazione ann e impostarlo su FALSE per rimuovere qualsiasi etichetta degli assi.
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLDIqcGksMC4xKVxueSA8LSBzaW4oeClcblxuIyBQbG90IHRoZSBkYXRhXG5wbG90KHgsXG4gICAgIHksXG4gICAgIHhheHQ9XCJuXCIsXG4gICAgIHlheHQ9XCJuXCIsXG4gICAgIGFubj1GQUxTRSkifQ==

Consiglio: non è l’informazione che cercavi? Vai a questa pagina.

Ruotare le etichette degli assi

Puoi aggiungere l’argomento las alla funzione axis() per ruotare i numeri corrispondenti a ciascun asse:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLDIqcGksMC4xKVxueSA8LSBzaW4oeClcblxuIyBQbG90IHRoZSBkYXRhLCBubyBheGVzXG5wbG90KHgsXG4gICAgIHksIFxuICAgICBheGVzPUZBTFNFKVxuXG4jIERyYXcgYSBib3hcbmJveCgpXG5cbiMgQWRkIChtb2RpZmllZCkgYXhlcyB0byB0aGUgcGxvdFxuYXhpcygyLCBcbiAgICAgbGFzPTIpXG5heGlzKDEsIFxuICAgICBsYXM9MCkifQ==

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!

Questo significa che vorrai passare 3 e 4 alla funzione axis():
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54PC1zZXEoMCwyKnBpLDAuMSlcbnk8LXNpbih4KVxuXG4jIFBsb3QgdGhlIGRhdGEsIGJ1dCBkb24ndCBwbG90IGF4ZXMgb3IgYW5ub3RhdGlvbnNcbnBsb3QoeCxcbiAgICAgeSxcbiAgICAgYXhlcz1GQUxTRSwgXG4gICAgIGFubj1GQUxTRSlcblxuIyBEcmF3IHRoZSB4LWF4aXMgYWJvdmUgdGhlIHBsb3QgYXJlYVxuYXhpcygzKVxuXG4jIERyYXcgdGhlIHktYXhpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHBsb3QgYXJlYVxuYXhpcyg0KVxuXG4jIERyYXcgYSBib3hcbmJveCgpIn0=

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

Considera il seguente codice:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERlZmluZSB0aGUgcG9zaXRpb24gb2YgdGljayBtYXJrc1xudjEgPC0gYygwLHBpLzIscGksMypwaS8yLDIqcGkpXG5cbiMgRGVmaW5lIHRoZSBsYWJlbHMgb2YgdGljayBtYXJrc1xudjIgPC0gYyhcIjBcIixcIlBpLzJcIixcIlBpXCIsXCIzKlBpLzJcIixcIjIqUGlcIilcblxuIyBUaGUgZGF0YVxueCA8LSBzZXEoMCwyKnBpLDAuMSlcbnkgPC0gc2luKHgpXG5cbiMgUGxvdCB0aGUgZGF0YVxucGxvdCh4LFxuICAgICB5LFxuICAgICB4YXh0ID0gXCJuXCIpXG5cbiMgQWRkIGFuIGF4aXMgdG8gdGhlIHBsb3QgXG5heGlzKHNpZGUgPSAxLCBcbiAgICAgYXQgPSB2MSwgXG4gICAgIGxhYmVscyA9IHYyLFxuICAgICB0Y2s9LS4wNSkifQ==

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 vale 1, che indica il lato inferiore. Con 2 sarebbe a sinistra, con 3 in alto e con 4 a destra;
  • L’argomento at indica i punti in cui disegnare le tacche. Qui usi le posizioni definite in V1;
  • Allo stesso modo, le labels che vuoi usare sono quelle specificate in V2;
  • 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!

Puoi specificare ulteriormente la dimensione delle tacche tramite tcl e l’aspetto delle etichette delle tacche è controllato con cex.axis, col.axis e font.axis.
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERlZmluZSB0aGUgcG9zaXRpb24gb2YgdGljayBtYXJrc1xudjEgPC0gYygwLHBpLzIscGksMypwaS8yLDIqcGkpXG5cbiMgRGVmaW5lIHRoZSBsYWJlbHMgb2YgdGljayBtYXJrc1xudjIgPC0gYyhcIjBcIixcIlBpLzJcIixcIlBpXCIsXCIzKlBpLzJcIixcIjIqUGlcIilcblxuIyBUaGUgZGF0YVxueCA8LSBzZXEoMCwyKnBpLDAuMSlcbnkgPC0gc2luKHgpXG5cbiMgUGxvdCB0aGUgZGF0YVxucGxvdCh4LFxuICAgICB5LFxuICAgICB4YXh0ID0gXCJuXCIpXG5cbiMgQWRkIGF4aXMgdG8gdGhlIHBsb3QgXG5heGlzKHNpZGUgPSAxLCBcbiAgICAgYXQgPSB2MSwgXG4gICAgIGxhYmVscyA9IHYyLFxuICAgICB0Y2s9LS4xLFxuICAgICB0Y2wgPSAtMC41LFxuICAgICBjZXguYXhpcz0xLjA1LFxuICAgICBjb2wuYXhpcz1cImJsdWVcIixcbiAgICAgZm9udC5heGlzPTUpIn0=

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.

Nota che qui usi l’argomento xaxp a cui passi la posizione delle tacche poste agli estremi dell’asse x, seguita dal numero di intervalli tra le tacche:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLDIqcGksMC4xKVxueSA8LSBzaW4oeClcblxuIyBQbG90IHRoZSBkYXRhXG5wbG90KHgsXG4gICAgIHksXG4gICAgIHhheHAgPSBjKDAsIDIqcGksIDUpKSJ9

Puoi anche eseguire il seguente codice per ottenere sostanzialmente lo stesso risultato:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhIFxueCA8LSBzZXEoMCwyKnBpLDAuMSlcbnkgPC0gc2luKHgpXG5cbiMgUGxvdCB0aGUgZGF0YSBcbnBsb3QoeCwgXG4gICAgIHksIFxuICAgICB4YXh0PVwiblwiKVxuXG4jIFVzZSBgcGFyKClgIHRvIHNldCBncmFwaGljYWwgYHhheHBgIHBhcmFtZXRlclxucGFyKHhheHA9IGMoMCwgMipwaSwgMikpIFxuXG4jIEFkZCBhbiBheGlzIHRvIHRoZSBwbG90IFxuYXhpcygxKSJ9

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].

Un esempio:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJuIDwtIDFcblxuIyBUaGUgZGF0YVxueCA8LSBzZXEoMCwgMTAwMDAsIDEpXG55IDwtIGV4cChuKS8oZXhwKG4pK3gpXG5cbiMgU2V0IGdyYXBoaWNhbCBwYXJhbWV0ZXJzIGB4bG9nYCBhbmQgYHhheHBgXG5wYXIoeGxvZz1UUlVFLCBcbiAgICB4YXhwPSBjKDEsIDQsIDMpKVxuXG4jIFBvdCB0aGUgZGF0YSBcbnBsb3QoeCwgXG4gICAgIHksIFxuICAgICBsb2c9XCJ4XCIpICJ9

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.

Un esempio con entrambi gli assi in scala logaritmica è:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJuIDwtIDFcblxuIyBUaGUgZGF0YVxueCA8LSBzZXEoMCwgMjAsIDEpXG55IDwtIGV4cCh4KS8oeClcblxuIyBTZXQgZ3JhcGhpY2FsIHBhcmFtZXRlcnMgYHhsb2dgIGFuZCBgeWF4cGBcbnBhcih4bG9nPVRSVUUsIFxuICAgIHhheHA9IGMoMSwgNCwgMykpXG4jIFNldCBncmFwaGljYWwgcGFyYW1ldGVycyBgeWxvZ2AgYW5kIGB5YXhwYFxucGFyKHlsb2c9VFJVRSwgXG4gICAgeWF4cD0gYygxLCAxMSwgMikpIFxuXG4jIFBsb3QgdGhlIGRhdGEgXG5wbG90KHgsIFxuICAgICB5LCBcbiAgICAgbG9nPVwieHlcIikifQ==

Come aggiungere tacche minori a un grafico in R

Puoi aggiungere rapidamente tacche minori al grafico con la funzione minor.tick() del pacchetto Hmisc:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIEltcG9ydCBgSG1pc2NgIGxpYnJhcnlcbmxpYnJhcnkoSG1pc2MpXG5cbiMgTWFrZSBhIG5ldyBwbG90XG5wbG90Lm5ldygpXG5cbiMgU2V0IG1pbm9yIHRpY2sgbWFya1xubWlub3IudGljayhueCA9IDEuNSwgXG4gICAgICAgICAgIG55ID0gMiwgXG4gICAgICAgICAgIHRpY2sucmF0aW89MC43NSkifQ==
  • L’argomento nx ti permette di specificare il numero di intervalli in cui vuoi dividere l’area tra le tacche principali sull’asse. Se gli passi il valore 1, le tacche minori saranno soppresse;
  • ny fa la stessa cosa di nx, ma per l’asse y;
  • tick.ratio indica il rapporto tra la lunghezza delle tacche minori e quella delle tacche principali. La lunghezza delle tacche principali è recuperata da par(tck=x).

4. Come creare due assi X o Y diversi

La prima opzione è creare un primo grafico ed eseguire la funzione par() con l’argomento new impostato su TRUE per evitare che R pulisca il device grafico:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFNldCBhIHNlZWQgXG5zZXQuc2VlZCgxMDEpXG5cbiMgVGhlIGRhdGFcbnggPC0gMToxMFxueSA8LSBybm9ybSgxMClcbnogPC0gcnVuaWYoMTAsIG1pbj0xMDAwLCBtYXg9MTAwMDApXG5cbiMgUGxvdCB0aGUgZGF0YVxucGxvdCh4LCB5KSBcblxuIyBEb24ndCBjbGVhbiB0aGUgZnJhbWUgYmVmb3JlIGRyYXdpbmdcbnBhcihuZXcgPSBUUlVFKSJ9

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 passare l per disegnare linee;
  • axes è impostato a FALSE così non vengono disegnati assi;
  • bty sopprime il riquadro attorno al grafico;
  • xlab è impostato a stringa vuota, quindi nessuna etichetta sull’asse x, e
  • ylab è 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:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEwMSlcbnggPC0gMToxMFxueSA8LSBybm9ybSgxMClcbnogPC0gcnVuaWYoMTAsIG1pbj0xMDAwLCBtYXg9MTAwMDApXG5wbG90KHgsIHkpIFxucGFyKG5ldyA9IFRSVUUpIiwic2FtcGxlIjoicGxvdCh4LCBcbiAgICAgeiwgXG4gICAgIHR5cGUgPSBcImxcIiwgXG4gICAgIGF4ZXMgPSBGQUxTRSxcbiAgICAgYnR5ID0gXCJuXCIsIFxuICAgICB4bGFiID0gXCJcIiwgXG4gICAgIHlsYWIgPSBcIlwiKSJ9

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:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEwMSlcbnggPC0gMToxMFxueSA8LSBybm9ybSgxMClcbnogPC0gcnVuaWYoMTAsIG1pbj0xMDAwLCBtYXg9MTAwMDApXG5wbG90KHgsIHkpIFxucGFyKG5ldyA9IFRSVUUpXG5wbG90KHgsIFxuICAgICB6LCBcbiAgICAgdHlwZSA9IFwibFwiLCAjUGxvdCB3aXRoIGxpbmVzXG4gICAgIGF4ZXMgPSBGQUxTRSwgI05vIGF4ZXNcbiAgICAgYnR5ID0gXCJuXCIsICNCb3ggYWJvdXQgcGxvdCBpcyBzdXBwcmVzc2VkXG4gICAgIHhsYWIgPSBcIlwiLCAgI05vIGxhYmVscyBvbiB4LWFuZCB5LWF4aXNcbiAgICAgeWxhYiA9IFwiXCIpIiwic2FtcGxlIjoiYXhpcyhzaWRlPTQsIFxuICAgICBhdCA9IHByZXR0eShyYW5nZSh6KSkpXG5tdGV4dChcInpcIiwgXG4gICAgICBzaWRlPTQsIFxuICAgICAgbGluZT0zKSJ9

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:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwbG90Lm5ldygpXG5zZXQuc2VlZCgxMDEpXG54IDwtIDE6MTBcbnkgPC0gcm5vcm0oMTApXG56IDwtIHJ1bmlmKDEwLCBtaW49MTAwMCwgbWF4PTEwMDAwKSBcbnBhcihtYXIgPSBjKDUsIDQsIDQsIDQpICsgMC4zKVxucGxvdCh4LCB5KVxucGFyKG5ldyA9IFRSVUUpXG5wbG90KHosIHksIHR5cGUgPSBcImxcIiwgYXhlcyA9IEZBTFNFLCBidHkgPSBcIm5cIiwgeGxhYiA9IFwiXCIsIHlsYWIgPSBcIlwiKVxuYXhpcyhzaWRlPTMsIGF0ID0gcHJldHR5KHJhbmdlKHopKSlcbm10ZXh0KFwielwiLCBzaWRlPTMsIGxpbmU9MykifQ==

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:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIEltcG9ydCBgbGF0dGljZUV4dHJhYFxubGlicmFyeShsYXR0aWNlRXh0cmEpXG5cbiMgVGhlIGRhdGFcbmNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbkFnZSA8LSBjaG9sJEFHRVxuQ2hvbCA8LSBjaG9sJENIT0xcblNtb2tlIDwtIGNob2wkU01PS0VcblN0YXRlIDwtIGNob2wkTU9SVFxuXG4jIENyZWF0ZSBhIGJpdmFyaWF0ZSBzY2F0dGVycGxvdCBgYWAgXG5hIDwtIHh5cGxvdChDaG9sIH4gQWdlfFN0YXRlKVxuXG4jIENyZWF0ZSBhIGJpdmFyaWF0ZSBzY2F0dGVycGxvdCBgYmAgXG5iIDwtIHh5cGxvdChTbW9rZSB+IEFnZXxTdGF0ZSlcblxuIyBEcmF3IHRoZSB0d28gcGxvdHMgd2l0aCBkaWZmZXJlbnQgeSBzY2FsZXMgXG5kb3VibGVZU2NhbGUoYSwgYiwgc3R5bGUxID0gMCwgc3R5bGUyID0gMywgYWRkLnlsYWIyID0gVFJVRSwgY29sdW1ucz0zKSJ9

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 funzione legend():
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLHBpLDAuMSlcbnkxIDwtIGNvcyh4KVxueTIgPC0gc2luKHgpXG5cbiMgUGxvdCBcbnBsb3QoYygwLDMpLCBjKDAsMyksIHR5cGU9XCJuXCIsIHhsYWI9XCJ4XCIsIHlsYWI9XCJ5XCIpXG5cbiMgRHJhdyBsaW5lc1xubGluZXMoeCwgeTEsIGNvbD1cInJlZFwiLCBsd2Q9MilcbmxpbmVzKHgsIHkyLCBjb2w9XCJibHVlXCIsIGx3ZD0yKVxuXG4jIEFkZCBsZWdlbmQgdG8gcGxvdCBcbmxlZ2VuZChcInRvcHJpZ2h0XCIsIFxuICAgICAgIGluc2V0PS4wNSwgXG4gICAgICAgY2V4ID0gMSwgXG4gICAgICAgdGl0bGU9XCJMZWdlbmRcIiwgXG4gICAgICAgYyhcIkNvc2ludXNcIixcIlNpbnVzXCIpLCBcbiAgICAgICBob3Jpej1UUlVFLCBcbiAgICAgICBsdHk9YygxLDEpLCBcbiAgICAgICBsd2Q9YygyLDIpLCBcbiAgICAgICBjb2w9YyhcInJlZFwiLFwiYmx1ZVwiKSwgXG4gICAgICAgYmc9XCJncmV5OTZcIikifQ==

Nota che gli argomenti pt.cex e title.cex descritti nella documentazione di legend() non funzionano davvero. Ci sono alcuni workaround:

  1. Metti il titolo o le etichette della legenda in un font diverso aggiungendo l’argomento text.font a legend():
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLHBpLDAuMSlcbnkxIDwtIGNvcyh4KVxueTIgPC0gc2luKHgpXG5cbiMgUGxvdCBcbnBsb3QoYygwLDMpLCBjKDAsMyksIHR5cGU9XCJuXCIsIHhsYWI9XCJ4XCIsIHlsYWI9XCJ5XCIpXG5cbiMgRHJhdyBsaW5lc1xubGluZXMoeCwgeTEsIGNvbD1cInJlZFwiLCBsd2Q9MilcbmxpbmVzKHgsIHkyLCBjb2w9XCJibHVlXCIsIGx3ZD0yKVxuXG4jIEFkZCBsZWdlbmRcbmxlZ2VuZChcInRvcHJpZ2h0XCIsIFxuICAgICAgIGluc2V0PS4wNSwgXG4gICAgICAgY2V4ID0gMSwgXG4gICAgICAgdGl0bGU9XCJMZWdlbmRcIiwgXG4gICAgICAgYyhcIkNvc2ludXNcIixcIlNpbnVzXCIpLCBcbiAgICAgICBob3Jpej1UUlVFLCBcbiAgICAgICBsdHk9YygxLDEpLCBcbiAgICAgICBsd2Q9YygyLDIpLCBcbiAgICAgICBjb2w9YyhcInJlZFwiLFwiYmx1ZVwiKSwgXG4gICAgICAgYmc9XCJncmV5OTZcIixcbiAgICAgICB0ZXh0LmZvbnQ9MykifQ==
  1. Disegna la legenda due volte con valori dell’argomento cex diversi
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFRoZSBkYXRhXG54IDwtIHNlcSgwLHBpLDAuMSlcbnkxIDwtIGNvcyh4KVxueTIgPC0gc2luKHgpXG5cbiMgUGxvdFxucGxvdChjKDAsMyksIGMoMCwzKSwgdHlwZT1cIm5cIiwgeGxhYj1cInhcIiwgeWxhYj1cInlcIilcblxuIyBEcmF3IGxpbmVzXG5saW5lcyh4LCB5MSwgY29sPVwicmVkXCIsIGx3ZD0yKVxubGluZXMoeCwgeTIsIGNvbD1cImJsdWVcIiwgbHdkPTIpXG5cbiMgQWRkIHN1YnRpdGxlcyBmb3IgbGVnZW5kXG5sZWdlbmQoXCJ0b3ByaWdodFwiLFxuICAgICAgIGluc2V0PS4wNSxcbiAgICAgICBjZXggPSAwLjc1LFxuICAgICAgIGMoXCJDb3NpbnVzXCIsXCJTaW51c1wiKSxcbiAgICAgICB0aXRsZT1cIlwiLFxuICAgICAgIGhvcml6PVRSVUUsXG4gICAgICAgbHR5PWMoMSwxKSwgXG4gICAgICAgbHdkPWMoMiwyKSwgXG4gICAgICAgY29sPWMoXCJyZWRcIixcImJsdWVcIikpXG5cbiMgQWRkIHRpdGxlIHRvIGxlZ2VuZCBcbmxlZ2VuZCgyLjA1LCAyLjk3LCBcbiAgICAgICBpbnNldD0uMDUsXG4gICAgICAgYyhcIlwiLFwiXCIpLFxuICAgICAgIHRpdGxlPVwiTGVnZW5kXCIsXG4gICAgICAgY2V4PTEuMTUsIFxuICAgICAgIGJ0eT1cIm5cIikifQ==

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdncGxvdDJgXG5saWJyYXJ5KGdncGxvdDIpXG5cbiMgUmVhZCBpbiB0aGUgZGF0YVxuY2hvbCA8LSByZWFkLnRhYmxlKHVybChcImh0dHA6Ly9hc3NldHMuZGF0YWNhbXAuY29tL2Jsb2dfYXNzZXRzL2Nob2wudHh0XCIpLCBcbiAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBUUlVFKVxuXG4jIFBsb3QgdGhlIGRhdGEgXG5nZ3Bsb3QoY2hvbCwgYWVzKHg9Y2hvbCRXRUlHSFQsIFxuICAgICAgICAgICAgICAgICB5PWNob2wkSEVJR0hUKSkgKyBcbiAgZ2VvbV9wb2ludChhZXMoY29sb3VyID0gZmFjdG9yKGNob2wkTU9SVCksIFxuICAgICAgICAgICAgICAgICBzaGFwZT1jaG9sJFNNT0tFKSkgKyBcbiAgeGxhYihcIldlaWdodFwiKSArIFxuICB5bGFiKFwiSGVpZ2h0XCIpICJ9

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:

  1. Dire alla scala di usare un titolo e delle etichette diverse
Se hai specificato argomenti come colour o shape, o altre estetiche, devi cambiare nomi ed etichette tramite le funzioni scale_color_discrete() e scale_shape_discrete() rispettivamente:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdncGxvdDJgXG5saWJyYXJ5KGdncGxvdDIpXG5cbiMgUmVhZCBpbiBkYXRhXG5jaG9sIDwtIHJlYWQudGFibGUodXJsKFwiaHR0cDovL2Fzc2V0cy5kYXRhY2FtcC5jb20vYmxvZ19hc3NldHMvY2hvbC50eHRcIiksIFxuICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IFRSVUUpXG5cbiMgUGxvdCB0aGUgZGF0YVxuZ2dwbG90KGNob2wsIGFlcyh4PWNob2wkV0VJR0hULCBcbiAgICAgICAgICAgICAgICAgeT1jaG9sJEhFSUdIVCkpICsgXG4gIGdlb21fcG9pbnQoYWVzKGNvbG91ciA9IGZhY3RvcihjaG9sJE1PUlQpLCBcbiAgICAgICAgICAgICAgICAgc2hhcGUgPSBjaG9sJFNNT0tFKSkgKyBcbiAgeGxhYihcIldlaWdodFwiKSArIFxuICB5bGFiKFwiSGVpZ2h0XCIpICsgXG4gIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj1jKDEsMC41KSxcbiAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygxLDEpKSArIFxuICBzY2FsZV9jb2xvcl9kaXNjcmV0ZShuYW1lID1cIkNvbmRpdGlvblwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoXCJBbGl2ZVwiLCBcIkRlYWRcIikpICtcbiAgc2NhbGVfc2hhcGVfZGlzY3JldGUobmFtZT1cIlNtb2tlclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoXCJOb24tc21va2VyXCIsIFwiU2lnYXJlXCIsIFwiUGlwZVwiICkpIn0=

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.

  1. Modificare il data frame in modo che il fattore abbia la forma desiderata
Ad esempio:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIFJlYWQgaW4gZGF0YVxuY2hvbCA8LSByZWFkLnRhYmxlKHVybChcImh0dHA6Ly9hc3NldHMuZGF0YWNhbXAuY29tL2Jsb2dfYXNzZXRzL2Nob2wudHh0XCIpLCBoZWFkZXIgPSBUUlVFKVxuXG4jIE1hbmlwdWxhdGUgdGhlIGRhdGFcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuXG4jIEluc3BlY3QgcmVzdWx0IFxuaGVhZChjaG9sKSJ9

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 funzione grid():
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbnggPC0gYygxLDIsMyw0LDUpXG55IDwtIDIqeFxuXG4jIFBsb3RcbnBsb3QoeCx5KVxuXG4jIEdyaWRcbmdyaWQoMTAsMTApIn0=

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:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIiIsInNhbXBsZSI6IiMgTG9hZCBpbiBgZ2dwbG90MmBcbmxpYnJhcnkoZ2dwbG90MilcblxuIyBQbG90IGRhdGEgXG5nZ3Bsb3QoY2hvbCwgYWVzKHg9Y2hvbCRXRUlHSFQsIHk9Y2hvbCRIRUlHSFQpKSArIFxuICBnZW9tX3BvaW50KGFlcyhjb2xvdXIgPSBmYWN0b3IoY2hvbCRNT1JUKSwgc2hhcGUgPSBjaG9sJFNNT0tFKSkgKyBcbiAgeGxhYihcIldlaWdodFwiKSArIFxuICB5bGFiKFwiSGVpZ2h0XCIpICsgXG4gIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gXCJncmV5NDBcIiksXG4gICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gXCJncmV5NDBcIikpIn0=

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!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIiIsInNhbXBsZSI6ImxpYnJhcnkoZ2dwbG90MilcbmdncGxvdChjaG9sLCBhZXMoeD1jaG9sJFdFSUdIVCwgeT1jaG9sJEhFSUdIVCkpICsgXG4gIGdlb21fcG9pbnQoYWVzKGNvbG91ciA9IGZhY3RvcihjaG9sJE1PUlQpLCBzaGFwZSA9IGNob2wkU01PS0VSKSkgKyBcbiAgeGxhYihcIldlaWdodFwiKSArIFxuICB5bGFiKFwiSGVpZ2h0XCIpICsgXG4gIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKG5hbWUgPVwiQ29uZGl0aW9uXCIsIGxhYmVscz1jKFwiQWxpdmVcIiwgXCJEZWFkXCIpKSArXG4gIHNjYWxlX3NoYXBlX2Rpc2NyZXRlKG5hbWU9XCJTbW9rZXJcIiwgbGFiZWxzPWMoXCJOb24tc21va2VyXCIsIFwiU2lnYXJlXCIsIFwiUGlwZVwiICkpICtcbiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPWMoMSwwLjUpLFxuICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDEsMSksXG4gICAgICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gXCJncmV5NDBcIiksXG4gICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gXCJncmV5NDBcIiksXG4gICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9IFwibmF2eVwiKVxuICAgICAgICApIn0=

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")

Plotting over DataCamp logo

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!

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERvd25sb2FkIGFuIGltYWdlXG5kb3dubG9hZC5maWxlKFwiaHR0cHM6Ly9ob2x0enlhbi5maWxlcy53b3JkcHJlc3MuY29tLzIwMTUvMTAvY3JvcHBlZC1wMTA5MDUxOC5qcGdcIiAsIGRlc3RmaWxlPVwibXlfaW1hZ2UuanBnXCIpXG5cbiMgTG9hZCBganBlZ2AgXG5saWJyYXJ5KGpwZWcpXG5cbiMgUmVhZCBpbiB0aGUganBnIGZpbGUgXG5teV9pbWFnZT1yZWFkSlBFRyhcIm15X2ltYWdlLmpwZ1wiKVxuXG4jIFNldCB1cCBhIHBsb3QgYXJlYSB3aXRoIG5vIHBsb3RcbnBsb3QoMToyLCB0eXBlPSduJywgbWFpbj1cIlwiLCB4bGFiPVwieFwiLCB5bGFiPVwieVwiKVxuXG4jIEdldCB0aGUgcGxvdCBpbmZvcm1hdGlvblxubGltIDwtIHBhcigpXG5yYXN0ZXJJbWFnZShteV9pbWFnZSwgbGltJHVzclsxXSwgbGltJHVzclszXSwgbGltJHVzclsyXSwgbGltJHVzcls0XSlcbmdyaWQoKVxuXG4jQWRkIHlvdXIgcGxvdFxubGluZXMoYygxLCAxLjIsIDEuNCwgMS42LCAxLjgsIDIuMCksIGMoMSwgMS4zLCAxLjcsIDEuNiwgMS43LCAxLjApLCB0eXBlPVwiYlwiLCBsd2Q9NSwgY29sPVwid2hpdGVcIikifQ==

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’argomento cex:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJ4IDwtIGMoMSwyLDMsNCw1KVxueSA8LSBjKDYsNyw4LDksMTApXG5cbnBsb3QoeCx5LGNleD0yLGNvbD1cInJlZFwiKSJ9
Ricorda, però, che R ti permette un controllo molto maggiore sui simboli tramite la funzione symbols():
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJkZiA8LSBkYXRhLmZyYW1lKHgxPTE6MTAsIFxuICAgICAgICAgICAgICAgICB4Mj1zYW1wbGUoMTA6OTksIDEwKSwgXG4gICAgICAgICAgICAgICAgIHgzPTEwOjEpXG5zeW1ib2xzKHg9ZGYkeDEsIFxuICAgICAgICB5PWRmJHgyLCBcbiAgICAgICAgY2lyY2xlcz1kZiR4MywgXG4gICAgICAgIGluY2hlcz0xLzMsIFxuICAgICAgICBhbm49RiwgXG4gICAgICAgIGJnPVwic3RlZWxibHVlMlwiLCBcbiAgICAgICAgZmc9TlVMTCkifQ==

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:
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgXG4gICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIiIsInNhbXBsZSI6ImxpYnJhcnkoZ2dwbG90MilcblxuZ2dwbG90KGNob2wsIFxuICAgICAgIGFlcyh4PWNob2wkV0VJR0hULCB5PWNob2wkSEVJR0hUKSwgXG4gICAgICAgc2l6ZSA9IDIpICsgXG4gIGdlb21fcG9pbnQoKSJ9

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.

Poi plotti x e y e tracci le linee nel grafico originale dove hai predetto i valori di lo:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJ4IDwtIDE6MTBcbnkgPC0gYygyLDQsNiw4LDcsMTIsMTQsMTYsMTgsMjApXG5cbiNFc3RpbWF0aW9ucyBiZXR3ZWVuIGRhdGFcbmxvIDwtIGxvZXNzKHl+eClcblxucGxvdCh4LHkpXG5cbmxpbmVzKHByZWRpY3QobG8pKSJ9

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!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgXG4gICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuc3VtbWFyeVNFIDwtIGZ1bmN0aW9uKGRhdGE9TlVMTCwgbWVhc3VyZXZhciwgZ3JvdXB2YXJzPU5VTEwsIG5hLnJtPUZBTFNFLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmYuaW50ZXJ2YWw9Ljk1LCAuZHJvcD1UUlVFKSB7XG4gICAgbGlicmFyeShwbHlyKVxuXG4gICAgIyBOZXcgdmVyc2lvbiBvZiBsZW5ndGggd2hpY2ggY2FuIGhhbmRsZSBOQSdzOiBpZiBuYS5ybT09VCwgZG9uJ3QgY291bnQgdGhlbVxuICAgIGxlbmd0aDIgPC0gZnVuY3Rpb24gKHgsIG5hLnJtPUZBTFNFKSB7XG4gICAgICAgIGlmIChuYS5ybSkgc3VtKCFpcy5uYSh4KSlcbiAgICAgICAgZWxzZSAgICAgICBsZW5ndGgoeClcbiAgICB9XG5cbiAgICAjIFRoaXMgZG9lcyB0aGUgc3VtbWFyeS4gRm9yIGVhY2ggZ3JvdXAncyBkYXRhIGZyYW1lLCByZXR1cm4gYSB2ZWN0b3Igd2l0aFxuICAgICMgTiwgbWVhbiwgYW5kIHNkXG4gICAgZGF0YWMgPC0gZGRwbHkoZGF0YSwgZ3JvdXB2YXJzLCAuZHJvcD0uZHJvcCxcbiAgICAgIC5mdW4gPSBmdW5jdGlvbih4eCwgY29sKSB7XG4gICAgICAgIGMoTiAgICA9IGxlbmd0aDIoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgbWVhbiA9IG1lYW4gICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgc2QgICA9IHNkICAgICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG1lYXN1cmV2YXJcbiAgICApXG5cbiAgICAjIFJlbmFtZSB0aGUgXCJtZWFuXCIgY29sdW1uICAgIFxuICAgIGRhdGFjIDwtIHJlbmFtZShkYXRhYywgYyhcIm1lYW5cIiA9IG1lYXN1cmV2YXIpKVxuXG4gICAgZGF0YWMkc2UgPC0gZGF0YWMkc2QgLyBzcXJ0KGRhdGFjJE4pICAjIENhbGN1bGF0ZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbWVhblxuXG4gICAgIyBDb25maWRlbmNlIGludGVydmFsIG11bHRpcGxpZXIgZm9yIHN0YW5kYXJkIGVycm9yXG4gICAgIyBDYWxjdWxhdGUgdC1zdGF0aXN0aWMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWw6IFxuICAgICMgZS5nLiwgaWYgY29uZi5pbnRlcnZhbCBpcyAuOTUsIHVzZSAuOTc1IChhYm92ZS9iZWxvdyksIGFuZCB1c2UgZGY9Ti0xXG4gICAgY2lNdWx0IDwtIHF0KGNvbmYuaW50ZXJ2YWwvMiArIC41LCBkYXRhYyROLTEpXG4gICAgZGF0YWMkY2kgPC0gZGF0YWMkc2UgKiBjaU11bHRcblxuICAgIHJldHVybihkYXRhYylcbn0iLCJzYW1wbGUiOiIjQ2FsY3VsYXRlIHNvbWUgc3RhdGlzdGljcyBmb3IgdGhlIGBjaG9sYCBkYXRhc2V0XG5jaG9sYyA8LSBzdW1tYXJ5U0UoY2hvbCwgXG4gICAgICAgICAgICAgICAgICAgbWVhc3VyZXZhcj1cIkNIT0xcIiwgXG4gICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoXCJNT1JUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTTU9LRVJcIikpXG4jUGxvdCB0aGUgZGF0YVxucGxvdChjaG9sYyROLCBcbiAgICAgY2hvbGMkQ0hPTCxcbiAgICAgeWxpbT1yYW5nZShjKGNob2xjJENIT0wtY2hvbGMkc2QsIFxuICAgICAgICAgICAgICAgICAgY2hvbGMkQ0hPTCtjaG9sYyRzZCkpLFxuICAgICBwY2g9MTksIFxuICAgICB4bGFiPVwiQ2hvbGVzdGVyb2wgTWVhc3VyZW1lbnRzXCIsIFxuICAgICB5bGFiPVwiQ2hvbGVzdGVyb2wgTWVhbiArLy0gU0RcIixcbiAgICAgbWFpbj1cIlNjYXR0ZXJwbG90IFdpdGggc2QgRXJyb3IgQmFyc1wiXG4pXG5cbiNEcmF3IGFycm93cyBvZiBhIFwic3BlY2lhbFwiIHR5cGVcbmFycm93cyhjaG9sYyROLCBcbiAgICAgICBjaG9sYyRDSE9MLWNob2xjJHNkLCBcbiAgICAgICBjaG9sYyROLCBcbiAgICAgICBjaG9sYyRDSE9MK2Nob2xjJHNkLCBcbiAgICAgICBsZW5ndGg9MC4wNSwgXG4gICAgICAgYW5nbGU9OTAsIFxuICAgICAgIGNvZGU9MykifQ==

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.

Per comodità, i dati e la funzione sono stati caricati per te:
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgXG4gICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuc3VtbWFyeVNFIDwtIGZ1bmN0aW9uKGRhdGE9TlVMTCwgbWVhc3VyZXZhciwgZ3JvdXB2YXJzPU5VTEwsIG5hLnJtPUZBTFNFLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmYuaW50ZXJ2YWw9Ljk1LCAuZHJvcD1UUlVFKSB7XG4gICAgbGlicmFyeShwbHlyKVxuXG4gICAgIyBOZXcgdmVyc2lvbiBvZiBsZW5ndGggd2hpY2ggY2FuIGhhbmRsZSBOQSdzOiBpZiBuYS5ybT09VCwgZG9uJ3QgY291bnQgdGhlbVxuICAgIGxlbmd0aDIgPC0gZnVuY3Rpb24gKHgsIG5hLnJtPUZBTFNFKSB7XG4gICAgICAgIGlmIChuYS5ybSkgc3VtKCFpcy5uYSh4KSlcbiAgICAgICAgZWxzZSAgICAgICBsZW5ndGgoeClcbiAgICB9XG5cbiAgICAjIFRoaXMgZG9lcyB0aGUgc3VtbWFyeS4gRm9yIGVhY2ggZ3JvdXAncyBkYXRhIGZyYW1lLCByZXR1cm4gYSB2ZWN0b3Igd2l0aFxuICAgICMgTiwgbWVhbiwgYW5kIHNkXG4gICAgZGF0YWMgPC0gZGRwbHkoZGF0YSwgZ3JvdXB2YXJzLCAuZHJvcD0uZHJvcCxcbiAgICAgIC5mdW4gPSBmdW5jdGlvbih4eCwgY29sKSB7XG4gICAgICAgIGMoTiAgICA9IGxlbmd0aDIoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgbWVhbiA9IG1lYW4gICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgc2QgICA9IHNkICAgICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG1lYXN1cmV2YXJcbiAgICApXG5cbiAgICAjIFJlbmFtZSB0aGUgXCJtZWFuXCIgY29sdW1uICAgIFxuICAgIGRhdGFjIDwtIHJlbmFtZShkYXRhYywgYyhcIm1lYW5cIiA9IG1lYXN1cmV2YXIpKVxuXG4gICAgZGF0YWMkc2UgPC0gZGF0YWMkc2QgLyBzcXJ0KGRhdGFjJE4pICAjIENhbGN1bGF0ZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbWVhblxuXG4gICAgIyBDb25maWRlbmNlIGludGVydmFsIG11bHRpcGxpZXIgZm9yIHN0YW5kYXJkIGVycm9yXG4gICAgIyBDYWxjdWxhdGUgdC1zdGF0aXN0aWMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWw6IFxuICAgICMgZS5nLiwgaWYgY29uZi5pbnRlcnZhbCBpcyAuOTUsIHVzZSAuOTc1IChhYm92ZS9iZWxvdyksIGFuZCB1c2UgZGY9Ti0xXG4gICAgY2lNdWx0IDwtIHF0KGNvbmYuaW50ZXJ2YWwvMiArIC41LCBkYXRhYyROLTEpXG4gICAgZGF0YWMkY2kgPC0gZGF0YWMkc2UgKiBjaU11bHRcblxuICAgIHJldHVybihkYXRhYylcbn0iLCJzYW1wbGUiOiIjQ2FsY3VsYXRlIHNvbWUgc3RhdGlzdGljcyBmb3IgdGhlIGNob2wgZGF0YXNldFxuY2hvbGMgPC0gc3VtbWFyeVNFKGNob2wsIFxuICAgICAgICAgICAgICAgICAgIG1lYXN1cmV2YXI9XCJDSE9MXCIsIFxuICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKFwiTU9SVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU01PS0VSXCIpKVxuXG4jUGxvdCB0aGUgY2hvbGMgZGF0YXNldFxubGlicmFyeShnZ3Bsb3QyKVxuZ2dwbG90KGNob2xjLCBhZXMoeD1TTU9LRVIsIFxuICAgICAgICAgICAgICAgICAgeT1DSE9MLCBcbiAgICAgICAgICAgICAgICAgIGNvbG91cj1NT1JUKSkgKyBcbiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUNIT0wtc2UsIFxuICAgICAgICAgICAgICAgICAgICAgIHltYXg9Q0hPTCtzZSwgXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9TU9SVCksIFxuICAgICAgICAgICAgICAgICAgd2lkdGg9LjEpICtcbiAgICBnZW9tX2xpbmUoYWVzKGdyb3VwPU1PUlQpKSArXG4gICAgZ2VvbV9wb2ludCgpIn0=
Se vuoi cambiare la posizione delle barre di errore, ad esempio quando si sovrappongono, potresti considerare l’uso della funzione position_dodge():
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuc3VtbWFyeVNFIDwtIGZ1bmN0aW9uKGRhdGE9TlVMTCwgbWVhc3VyZXZhciwgZ3JvdXB2YXJzPU5VTEwsIG5hLnJtPUZBTFNFLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmYuaW50ZXJ2YWw9Ljk1LCAuZHJvcD1UUlVFKSB7XG4gICAgbGlicmFyeShwbHlyKVxuXG4gICAgIyBOZXcgdmVyc2lvbiBvZiBsZW5ndGggd2hpY2ggY2FuIGhhbmRsZSBOQSdzOiBpZiBuYS5ybT09VCwgZG9uJ3QgY291bnQgdGhlbVxuICAgIGxlbmd0aDIgPC0gZnVuY3Rpb24gKHgsIG5hLnJtPUZBTFNFKSB7XG4gICAgICAgIGlmIChuYS5ybSkgc3VtKCFpcy5uYSh4KSlcbiAgICAgICAgZWxzZSAgICAgICBsZW5ndGgoeClcbiAgICB9XG5cbiAgICAjIFRoaXMgZG9lcyB0aGUgc3VtbWFyeS4gRm9yIGVhY2ggZ3JvdXAncyBkYXRhIGZyYW1lLCByZXR1cm4gYSB2ZWN0b3Igd2l0aFxuICAgICMgTiwgbWVhbiwgYW5kIHNkXG4gICAgZGF0YWMgPC0gZGRwbHkoZGF0YSwgZ3JvdXB2YXJzLCAuZHJvcD0uZHJvcCxcbiAgICAgIC5mdW4gPSBmdW5jdGlvbih4eCwgY29sKSB7XG4gICAgICAgIGMoTiAgICA9IGxlbmd0aDIoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgbWVhbiA9IG1lYW4gICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgc2QgICA9IHNkICAgICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG1lYXN1cmV2YXJcbiAgICApXG5cbiAgICAjIFJlbmFtZSB0aGUgXCJtZWFuXCIgY29sdW1uICAgIFxuICAgIGRhdGFjIDwtIHJlbmFtZShkYXRhYywgYyhcIm1lYW5cIiA9IG1lYXN1cmV2YXIpKVxuXG4gICAgZGF0YWMkc2UgPC0gZGF0YWMkc2QgLyBzcXJ0KGRhdGFjJE4pICAjIENhbGN1bGF0ZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbWVhblxuXG4gICAgIyBDb25maWRlbmNlIGludGVydmFsIG11bHRpcGxpZXIgZm9yIHN0YW5kYXJkIGVycm9yXG4gICAgIyBDYWxjdWxhdGUgdC1zdGF0aXN0aWMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWw6IFxuICAgICMgZS5nLiwgaWYgY29uZi5pbnRlcnZhbCBpcyAuOTUsIHVzZSAuOTc1IChhYm92ZS9iZWxvdyksIGFuZCB1c2UgZGY9Ti0xXG4gICAgY2lNdWx0IDwtIHF0KGNvbmYuaW50ZXJ2YWwvMiArIC41LCBkYXRhYyROLTEpXG4gICAgZGF0YWMkY2kgPC0gZGF0YWMkc2UgKiBjaU11bHRcblxuICAgIHJldHVybihkYXRhYylcbn0iLCJzYW1wbGUiOiIjQ2FsY3VsYXRlIHNvbWUgc3RhdGlzdGljcyBmb3IgdGhlIGNob2wgZGF0YXNldFxuY2hvbGMgPC0gc3VtbWFyeVNFKGNob2wsIFxuICAgICAgICAgICAgICAgICAgIG1lYXN1cmV2YXI9XCJDSE9MXCIsIFxuICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKFwiTU9SVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU01PS0VSXCIpKVxuXG4jUGxvdCB0aGUgY2hvbGMgZGF0YXNldFxubGlicmFyeShnZ3Bsb3QyKVxucGQgPC0gcG9zaXRpb25fZG9kZ2UoMC4xKVxuZ2dwbG90KGNob2xjLCBhZXMoeD1TTU9LRVIsIFxuICAgICAgICAgICAgICAgICAgeT1DSE9MLCBcbiAgICAgICAgICAgICAgICAgIGNvbG91cj1NT1JUKSkgKyBcbiAgICBnZW9tX2Vycm9iYXIoYWVzKHltaW49Q0hPTC1zZSwgXG4gICAgICAgICAgICAgICAgICAgICAgeW1heD1DSE9MK3NlLCBcbiAgICAgICAgICAgICAgICAgICAgICBncm91cD1NT1JUKSwgXG4gICAgICAgICAgICAgICAgICB3aWR0aD0uMSwgXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbj1wZCkgK1xuICAgIGdlb21fbGluZShhZXMoZ3JvdXA9TU9SVCkpICtcbiAgICBnZW9tX3BvaW50KCkifQ==

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%.

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuc3VtbWFyeVNFIDwtIGZ1bmN0aW9uKGRhdGE9TlVMTCwgbWVhc3VyZXZhciwgZ3JvdXB2YXJzPU5VTEwsIG5hLnJtPUZBTFNFLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmYuaW50ZXJ2YWw9Ljk1LCAuZHJvcD1UUlVFKSB7XG4gICAgbGlicmFyeShwbHlyKVxuXG4gICAgIyBOZXcgdmVyc2lvbiBvZiBsZW5ndGggd2hpY2ggY2FuIGhhbmRsZSBOQSdzOiBpZiBuYS5ybT09VCwgZG9uJ3QgY291bnQgdGhlbVxuICAgIGxlbmd0aDIgPC0gZnVuY3Rpb24gKHgsIG5hLnJtPUZBTFNFKSB7XG4gICAgICAgIGlmIChuYS5ybSkgc3VtKCFpcy5uYSh4KSlcbiAgICAgICAgZWxzZSAgICAgICBsZW5ndGgoeClcbiAgICB9XG5cbiAgICAjIFRoaXMgZG9lcyB0aGUgc3VtbWFyeS4gRm9yIGVhY2ggZ3JvdXAncyBkYXRhIGZyYW1lLCByZXR1cm4gYSB2ZWN0b3Igd2l0aFxuICAgICMgTiwgbWVhbiwgYW5kIHNkXG4gICAgZGF0YWMgPC0gZGRwbHkoZGF0YSwgZ3JvdXB2YXJzLCAuZHJvcD0uZHJvcCxcbiAgICAgIC5mdW4gPSBmdW5jdGlvbih4eCwgY29sKSB7XG4gICAgICAgIGMoTiAgICA9IGxlbmd0aDIoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgbWVhbiA9IG1lYW4gICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgc2QgICA9IHNkICAgICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG1lYXN1cmV2YXJcbiAgICApXG5cbiAgICAjIFJlbmFtZSB0aGUgXCJtZWFuXCIgY29sdW1uICAgIFxuICAgIGRhdGFjIDwtIHJlbmFtZShkYXRhYywgYyhcIm1lYW5cIiA9IG1lYXN1cmV2YXIpKVxuXG4gICAgZGF0YWMkc2UgPC0gZGF0YWMkc2QgLyBzcXJ0KGRhdGFjJE4pICAjIENhbGN1bGF0ZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbWVhblxuXG4gICAgIyBDb25maWRlbmNlIGludGVydmFsIG11bHRpcGxpZXIgZm9yIHN0YW5kYXJkIGVycm9yXG4gICAgIyBDYWxjdWxhdGUgdC1zdGF0aXN0aWMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWw6IFxuICAgICMgZS5nLiwgaWYgY29uZi5pbnRlcnZhbCBpcyAuOTUsIHVzZSAuOTc1IChhYm92ZS9iZWxvdyksIGFuZCB1c2UgZGY9Ti0xXG4gICAgY2lNdWx0IDwtIHF0KGNvbmYuaW50ZXJ2YWwvMiArIC41LCBkYXRhYyROLTEpXG4gICAgZGF0YWMkY2kgPC0gZGF0YWMkc2UgKiBjaU11bHRcblxuICAgIHJldHVybihkYXRhYylcbn0iLCJzYW1wbGUiOiIjQ2FsY3VsYXRlIHNvbWUgc3RhdGlzdGljcyBmb3IgdGhlIGNob2wgZGF0YXNldFxuY2hvbGMgPC0gc3VtbWFyeVNFKGNob2wsIFxuICAgICAgICAgICAgICAgICAgIG1lYXN1cmV2YXI9XCJDSE9MXCIsIFxuICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKFwiTU9SVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU01PS0VSXCIpKVxuXG4jUGxvdCB0aGUgY2hvbGMgZGF0YXNldFxubGlicmFyeShnZ3Bsb3QyKVxucGQgPC0gcG9zaXRpb25fZG9kZ2UoMC4xKVxuZ2dwbG90KGNob2xjLCBhZXMoeD1TTU9LRVIsIFxuICAgICAgICAgICAgICAgICAgeT1DSE9MLFxuICAgICAgICAgICAgICAgICAgY29sb3VyPU1PUlQpKSArIFxuICAgIGdlb21fZXJyb3JiYXIoYWVzKHltaW49Q0hPTC1jaSwgXG4gICAgICAgICAgICAgICAgICAgICAgeW1heD1DSE9MK2NpLCBcbiAgICAgICAgICAgICAgICAgICAgICBncm91cD1NT1JUKSwgXG4gICAgICAgICAgICAgICAgICB3aWR0aD0uMSwgXG4 gICAgICAgICAgICAgICAgICBjb2xvdXI9XCJibGFja1wiLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb249cGQpICtcbiAgICBnZW9tX2xpbmUoYWVzKGdyb3VwPU1PUlQpKSArXG4gICAgZ2VvbV9wb2ludCgpIn0=

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():

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuc3VtbWFyeVNFIDwtIGZ1bmN0aW9uKGRhdGE9TlVMTCwgbWVhc3VyZXZhciwgZ3JvdXB2YXJzPU5VTEwsIG5hLnJtPUZBTFNFLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmYuaW50ZXJ2YWw9Ljk1LCAuZHJvcD1UUlVFKSB7XG4gICAgbGlicmFyeShwbHlyKVxuXG4gICAgIyBOZXcgdmVyc2lvbiBvZiBsZW5ndGggd2hpY2ggY2FuIGhhbmRsZSBOQSdzOiBpZiBuYS5ybT09VCwgZG9uJ3QgY291bnQgdGhlbVxuICAgIGxlbmd0aDIgPC0gZnVuY3Rpb24gKHgsIG5hLnJtPUZBTFNFKSB7XG4gICAgICAgIGlmIChuYS5ybSkgc3VtKCFpcy5uYSh4KSlcbiAgICAgICAgZWxzZSAgICAgICBsZW5ndGgoeClcbiAgICB9XG5cbiAgICAjIFRoaXMgZG9lcyB0aGUgc3VtbWFyeS4gRm9yIGVhY2ggZ3JvdXAncyBkYXRhIGZyYW1lLCByZXR1cm4gYSB2ZWN0b3Igd2l0aFxuICAgICMgTiwgbWVhbiwgYW5kIHNkXG4gICAgZGF0YWMgPC0gZGRwbHkoZGF0YSwgZ3JvdXB2YXJzLCAuZHJvcD0uZHJvcCxcbiAgICAgIC5mdW4gPSBmdW5jdGlvbih4eCwgY29sKSB7XG4gICAgICAgIGMoTiAgICA9IGxlbmd0aDIoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgbWVhbiA9IG1lYW4gICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgc2QgICA9IHNkICAgICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG1lYXN1cmV2YXJcbiAgICApXG5cbiAgICAjIFJlbmFtZSB0aGUgXCJtZWFuXCIgY29sdW1uICAgIFxuICAgIGRhdGFjIDwtIHJlbmFtZShkYXRhYywgYyhcIm1lYW5cIiA9IG1lYXN1cmV2YXIpKVxuXG4gICAgZGF0YWMkc2UgPC0gZGF0YWMkc2QgLyBzcXJ0KGRhdGFjJE4pICAjIENhbGN1bGF0ZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbWVhblxuXG4gICAgIyBDb25maWRlbmNlIGludGVydmFsIG11bHRpcGxpZXIgZm9yIHN0YW5kYXJkIGVycm9yXG4gICAgIyBDYWxjdWxhdGUgdC1zdGF0aXN0aWMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWw6IFxuICAgICMgZS5nLiwgaWYgY29uZi5pbnRlcnZhbCBpcyAuOTUsIHVzZSAuOTc1IChhYm92ZS9iZWxvdyksIGFuZCB1c2UgZGY9Ti0xXG4gICAgY2lNdWx0IDwtIHF0KGNvbmYuaW50ZXJ2YWwvMiArIC41LCBkYXRhYyROLTEpXG4gICAgZGF0YWMkY2kgPC0gZGF0YWMkc2UgKiBjaU11bHRcblxuICAgIHJldHVybihkYXRhYylcbn0iLCJzYW1wbGUiOiIjQ2FsY3VsYXRlIHNvbWUgc3RhdGlzdGljcyBmb3IgdGhlIGNob2wgZGF0YXNldFxuY2hvbGMgPC0gc3VtbWFyeVNFKGNob2wsIFxuICAgICAgICAgICAgICAgICAgIG1lYXN1cmV2YXI9XCJDSE9MXCIsIFxuICAgICAgICAgICAgICAgICAgIGdyb3VwdmFycz1jKFwiTU9SVFwiLFwiU01PS0VSXCIpKVxuXG4jUGxvdCB0aGUgY2hvbGMgZGF0YXNldFxubGlicrFyeShnZ3Bsb3QyKVxucGQgPC0gcG9zaXRpb25fZG9kZ2UoMC4xKVxuZ2dwbG90KGNob2xjLCBhZXMoeD1TTU9LRVIsIFxuICAgICAgICAgICAgICAgICAgeT1DSE9MLCBcbiAgICAgICAgICAgICAgICAgIGNvbG91cj1NT1JUKSkgKyBcbiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUNIT0wtc2QsIFxuICAgICAgICAgICAgICAgICAgICAgIHltYXg9Q0hPTCtzZCwgXG4gICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9TU9SVCksIFxuICAgICAgICAgICAgICAgICAgd2lkdGg9LjEsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbj1wZCkgK1xuICAgIGdlb21fbGluZShhZXMoZ3JvdXA9TU9SVCkpICtcbiAgICBnZW9tX3BvaW50KCkifQ==

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbmQwIDwtIG1hdHJpeChybm9ybSgxNSksIG5jb2w9MylcbmQxIDwtIG1hdHJpeChybm9ybSgxNSksIG5jb2w9MylcblxuIyBTZXQgbGltaXRzIFxubGltaXRzIDwtIHJhbmdlKGQwLGQxKVxuXG4jIFNldCBncmFwaGljYWwgcGFyYW1ldGVyIGBtZnJvd2BcbnBhcihtZnJvdyA9IGMoMSwgMikpIFxuXG4jIE1ha2UgMiBib3hwbG90c1xuYm94cGxvdChkMCxcbiAgICAgICAgeWxpbT1saW1pdHMpXG5ib3hwbG90KGQxLFxuICAgICAgICB5bGltPWxpbWl0cykifQ==

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:

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIlxuc3VtbWFyeVNFIDwtIGZ1bmN0aW9uKGRhdGE9TlVMTCwgbWVhc3VyZXZhciwgZ3JvdXB2YXJzPU5VTEwsIG5hLnJtPUZBTFNFLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmYuaW50ZXJ2YWw9Ljk1LCAuZHJvcD1UUlVFKSB7XG4gICAgbGlicmFyeShwbHlyKVxuXG4gICAgIyBOZXcgdmVyc2lvbiBvZiBsZW5ndGggd2hpY2ggY2FuIGhhbmRsZSBOQSdzOiBpZiBuYS5ybT09VCwgZG9uJ3QgY291bnQgdGhlbVxuICAgIGxlbmd0aDIgPC0gZnVuY3Rpb24gKHgsIG5hLnJtPUZBTFNFKSB7XG4gICAgICAgIGlmIChuYS5ybSkgc3VtKCFpcy5uYSh4KSlcbiAgICAgICAgZWxzZSAgICAgICBsZW5ndGgoeClcbiAgICB9XG5cbiAgICAjIFRoaXMgZG9lcyB0aGUgc3VtbWFyeS4gRm9yIGVhY2ggZ3JvdXAncyBkYXRhIGZyYW1lLCByZXR1cm4gYSB2ZWN0b3Igd2l0aFxuICAgICMgTiwgbWVhbiwgYW5kIHNkXG4gICAgZGF0YWMgPC0gZGRwbHkoZGF0YSwgZ3JvdXB2YXJzLCAuZHJvcD0uZHJvcCxcbiAgICAgIC5mdW4gPSBmdW5jdGlvbih4eCwgY29sKSB7XG4gICAgICAgIGMoTiAgICA9IGxlbmd0aDIoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgbWVhbiA9IG1lYW4gICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSksXG4gICAgICAgICAgc2QgICA9IHNkICAgICAoeHhbW2NvbF1dLCBuYS5ybT1uYS5ybSlcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG1lYXN1cmV2YXJcbiAgICApXG5cbiAgICAjIFJlbmFtZSB0aGUgXCJtZWFuXCIgY29sdW1uICAgIFxuICAgIGRhdGFjIDwtIHJlbmFtZShkYXRhYywgYyhcIm1lYW5cIiA9IG1lYXN1cmV2YXIpKVxuXG4gICAgZGF0YWMkc2UgPC0gZGF0YWMkc2QgLyBzcXJ0KGRhdGFjJE4pICAjIENhbGN1bGF0ZSBzdGFuZGFyZCBlcnJvciBvZiB0aGUgbWVhblxuXG4gICAgIyBDb25maWRlbmNlIGludGVydmFsIG11bHRpcGxpZXIgZm9yIHN0YW5kYXJkIGVycm9yXG4gICAgIyBDYWxjdWxhdGUgdC1zdGF0aXN0aWMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWw6IFxuICAgICMgZS5nLiwgaWYgY29uZi5pbnRlcnZhbCBpcyAuOTUsIHVzZSAuOTc1IChhYm92ZS9iZWxvdyksIGFuZCB1c2UgZGY9Ti0xXG4gICAgY2lNdWx0IDwtIHF0KGNvbmYuaW50ZXJ2YWwvMiArIC41LCBkYXRhYyROLTEpXG4gICAgZGF0YWMkY2kgPC0gZGF0YWMkc2UgKiBjaU11bHRcblxuICAgIHJldHVybihkYXRhYylcbn0iLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdncGxvdDJgXG5saWJyYXJ5KGdncGxvdDIpXG5cbiNDYWxjdWxhdGUgc29tZSBzdGF0aXN0aWNzIGZvciB0aGUgY2hvbCBkYXRhc2V0XG5jaG9sYyA8LSBzdW1tYXJ5U0UoY2hvbCwgXG4gICAgICAgICAgICAgICAgICAgbWVhc3VyZXZhcj1cIkNIT0xcIiwgXG4gICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoXCJNT1JUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTTU9LRVJcIikpXG5cbiNQbG90IHRoZSBjaG9sYyBkYXRhc2V0XG5nZ3Bsb3QoY2hvbGMsIGFlcyh4PVNNT0tFUiwgXG4gICAgICAgICAgICAgICAgICB5PUNIT0wsIFxuICAgICAgICAgICAgICAgICAgY29sb3VyPU1PUlQpKSArIFxuICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUNIT0wtc2QsIFxuICAgICAgICAgICAgICAgICAgICB5bWF4PUNIT0wrc2QsIFxuICAgICAgICAgICAgICAgICAgICBncm91cD1NT1JUKSwgXG4gICAgICAgICAgICAgICAgd2lkdGg9LjEsIFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uPXBkKSArIFxuICBnZW9tX2xpbmUoYWVzKGdyb3VwPU1PUlQpKSArIFxuICBnZW9tX3BvaW50KCkgKyBcbiAgZmFjZXRfZ3JpZCguIH4gTU9SVCkifQ==

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdyaWRFeHRyYWAgYW5kIGBnZ3Bsb3QyYFxubGlicmFyeShncmlkRXh0cmEpXG5saWJyYXJ5KGdncGxvdDIpXG5cbiMgUGxvdFxucGxvdDEgPC0gcXBsb3QoMSlcbnBsb3QyIDwtIHFwbG90KDEpXG5cbiMgQXJyYW5nZSBgcGxvdDFgIGFuZCBgcGxvdDJgXG5ncmlkLmFycmFuZ2UocGxvdDEsIFxuICAgICAgICAgICAgIHBsb3QyLCBcbiAgICAgICAgICAgICBuY29sPTIpIn0=

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!

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgXG4gICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIiIsInNhbXBsZSI6IiMgTG9hZCBgbGF0dGljZWBcbmxpYnJhcnkobGF0dGljZSlcblxuI1Bsb3QgdHdvIHBsb3RzIHNpZGUgYnkgc2lkZVxuYndwbG90KH4gQ0hPTHxTTU9LRVIrTU9SVCxcbiAgICAgICBjaG9sKSJ9

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbnggPC0gc2VxKDAscGksMC4xKVxueTEgPC0gY29zKHgpXG5cbiMgUGxvdFxucGxvdCh4LFxuICAgICB5MSxcbiAgICAgdHlwZT1cImxcIixcbiAgICAgY29sID0gXCJyZWRcIilcblxuIyBNb3JlIGRhdGFcbnkyIDwtIHNpbih4KVxueTMgPC0gdGFuKHgpXG55NCA8LSBsb2coeClcblxuIyBMaW5lc1xubGluZXMoeCx5Mixjb2w9XCJncmVlblwiKVxubGluZXMoeCx5Mixjb2w9XCJncmVlblwiKVxubGluZXMoeCx5Myxjb2w9XCJibGFja1wiKVxubGluZXMoeCx5NCxjb2w9XCJibHVlXCIpIn0=

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().

Consiglio: se vuoi plottare punti nello stesso grafico, puoi usare la funzione points():
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbnggPC0gc2VxKDAscGksMC4xKVxueTUgPC0geF4zXG5cbiMgUG9pbnRzXG5wb2ludHMoeCxcbiAgICAgICB5NSxcbiAgICAgICBjb2w9XCJ5ZWxsb3dcIikifQ==

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbnggPC0gc2VxKDAscGksMC4xKVxueTEgPC0gY29zKHgpXG5cbiNiYXNpYyBncmFwaGljYWwgb2JqZWN0XG5wbG90KHgseTEsdHlwZT1cImxcIiAsY29sID0gXCJyZWRcIilcblxuIyBNb3JlIGRhdGFcbnkyIDwtIHNpbih4KVxueTMgPC0gdGFuKHgpXG55NCA8LSBsb2coeClcbnk1IDwtIHheM1xuXG4jZmlyc3QgbGF5ZXJcbmxpbmVzKHgseTIsY29sPVwiZ3JlZW5cIiwgbHR5ID0gMSwgbHdkID0gMykgXG4jc2Vjb25kIGxheWVyXG5saW5lcyh4LHkyLGNvbD1cImdyZWVuXCIsIGx0eSA9IDMsIGx3ZCA9IDIsIHBjaCA9IDIpIFxuI3RoaXJkIGxheWVyXG5saW5lcyh4LHkzLGNvbD1cImJsYWNrXCIsIGx0eSA9IDIsIGx3ZCA9IDEsIHBjaCA9IDMsIGxlbmQgPSAwLCBsam9pbiA9IDIpIFxuI2ZvdXJ0aCBsYXllclxucG9pbnRzKHgseTQsY29sPVwiYmx1ZVwiLCBwY2g9MjEsIGJnID0gXCJyZWRcIikgXG4jZmlmdGggbGF5ZXJcbnBvaW50cyh4LCB5NSwgY29sPVwieWVsbG93XCIsIHBjaCA9IDI0LCBiZyA9IFwiYmx1ZVwiKSAifQ==

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à:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdncGxvdDJgXG5saWJyYXJ5KGdncGxvdDIpXG5cbiMgRGF0YVxueCA8LSAxOjEwXG55MSA8LSBjKDIsNCw2LDgsNywxMiwxNCwxNiwxOCwyMClcbnkyIDwtIHJub3JtKDEwLCBtZWFuID0gNSlcbmRmIDwtIGRhdGEuZnJhbWUoeCwgeTEsIHkyKVxuXG4jIGJhc2ljIGdyYXBoaWNhbCBvYmplY3RcbmdncGxvdChkZiwgYWVzKHgpKSArICBcbiAgIyBmaXJzdCBsYXllclxuICBnZW9tX2xpbmUoYWVzKHk9eTEpLCBcbiAgICAgICAgICAgIGNvbG91cj1cInJlZFwiKSArIFxuICAjIHNlY29uZCBsYXllclxuICBnZW9tX2xpbmUoYWVzKHk9eTIpLCAgICAgIFxuICAgICAgICAgICAgY29sb3VyPVwiZ3JlZW5cIikgIn0=

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’argomento asp della funzione plot(), completato con un intero, per impostare il rapporto d’aspetto. Guarda questo primo esempio senza rapporto d’aspetto definito:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbnggPC0gc2VxKDAsMipwaSwwLjEpXG55IDwtIHNpbih4KVxuXG4jIFBsb3RcbnBsb3QoeCx5KSJ9
E confrontalo ora con il grafico in cui il rapporto d’aspetto è definito con l’argomento asp:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERhdGFcbnggPC0gc2VxKDAsMipwaSwwLjEpXG55IDwtIHNpbih4KVxuXG4jIFBsb3RcbnBsb3QoeCxcbiAgICAgeSwgXG4gICAgIGFzcD0yKSJ9

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:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdncGxvdDJgXG5saWJyYXJ5KGdncGxvdDIpXG5cbiMgRGF0YVxuZGYgPC0gZGF0YS5mcmFtZSh4ID0gcnVuaWYoMTAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgeSA9IHJ1bmlmKDEwMCwgMCwgNSkpXG5cbiMgUGxvdFxuZ2dwbG90KGRmLCBhZXMoeD14LCB5PXkpKSArIGdlb21fcG9pbnQoKSJ9
contro
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIExvYWQgaW4gYGdncGxvdDJgXG5saWJyYXJ5KGdncGxvdDIpXG5cbiMgRGF0YVxuZGYgPC0gZGF0YS5mcmFtZSh4ID0gcnVuaWYoMTAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgeSA9IHJ1bmlmKDEwMCwgMCwgNSkpXG5cbiMgUGxvdFxuZ2dwbG90KGRmLCBhZXMoeD14LCB5PXkpKSArIFxuICBnZW9tX3BvaW50KCkgKyBcbiAgY29vcmRfZml4ZWQocmF0aW89MSkifQ==

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:
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImNob2wgPC0gcmVhZC50YWJsZSh1cmwoXCJodHRwOi8vYXNzZXRzLmRhdGFjYW1wLmNvbS9ibG9nX2Fzc2V0cy9jaG9sLnR4dFwiKSwgaGVhZGVyID0gVFJVRSlcbmxldmVscyhjaG9sJFNNT0tFKVtsZXZlbHMoY2hvbCRTTU9LRSk9PVwiTm9uLXNtb2tlclwiXSA8LSBcIk5vbi1zbW9rZXJcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJTaWdhcmVcIl0gPC0gXCJTaWdhcmVcIlxubGV2ZWxzKGNob2wkU01PS0UpW2xldmVscyhjaG9sJFNNT0tFKT09XCJQaXBlXCJdIDwtIFwiUGlwZVwiXG5uYW1lcyhjaG9sKVtuYW1lcyhjaG9sKT09XCJTTU9LRVwiXSAgPC0gXCJTTU9LRVJcIiIsInNhbXBsZSI6IiMgTG9hZCBpbiBgTUFTU2BcbmxpYnJhcnkoTUFTUylcblxuIyBEYXRhXG54ID0gY2hvbCRIRUlHSFRcbnkgPSBjaG9sJFdFSUdIVFxueiA9IGFzLm51bWVyaWMoY2hvbCRNT1JUKVxuXG4jIFBsb3QgXG5lcXNjcGxvdCh4LCBcbiAgICAgICAgIHksIFxuICAgICAgICAgcmF0aW8gPSAxLCBcbiAgICAgICAgIGNvbD1jKFwicmVkXCIsIFwiZ3JlZW5cIiksIFxuICAgICAgICAgcGNoPWMoMSwyKSkifQ==

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.

  • 0 significa 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.
  • 1 significa che il testo è allineato a destra: tutto il testo è allineato al margine destro.
Poi puoi plottare il data frame appena creato con la funzione ggplot(), definendo gli assi x e y come hjust e vjust rispettivamente:
eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImhqdXN0dmp1c3QgPC0gZXhwYW5kLmdyaWQoaGp1c3Q9YygwLCAwLjUsIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdD1jKDAsIDAuNSwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlPWMoMCwgNDUsIDkwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIiwic2FtcGxlIjoibGlicmFyeShnZ3Bsb3QyKVxuZ2dwbG90KGhqdXN0dmp1c3QsIGFlcyh4PWhqdXN0LCBcbiAgICAgICAgICAgICAgIHk9dmp1c3QpKSArIFxuICAgIGdlb21fcG9pbnQoKSArXG4gICAgZ2VvbV90ZXh0KGFlcyhsYWJlbD10ZXh0LCBcbiAgICAgICAgICAgICAgICAgIGFuZ2xlPWFuZ2xlLCBcbiAgICAgICAgICAgICAgICAgIGhqdXN0PWhqdXN0LCBcbiAgICAgICAgICAgICAgICAgIHZqdXN0PXZqdXN0KSkgKyBcbiAgICBmYWNldF9ncmlkKH5hbmdsZSkgK1xuICAgIHNjYWxlX3hfY29udGludW91cyhicmVha3M9YygwLCAwLjUsIDEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kPWMoMCwgMC4yKSkgK1xuICAgIHNjYWxlX3lfY29udGludW91cyhicmVha3M9YygwLCAwLjUsIDEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kPWMoMCwgMC4yKSkifQ==

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!
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5kZiA8LSBkYXRhLmZyYW1lKHg9TEVUVEVSU1sxOjNdLFxuICAgICAgICAgICAgICAgICB5PTE6MylcbnAgPC0gZ2dwbG90KGRmLCBhZXMoeCx5KSkgKyBcbiAgZ2VvbV9wb2ludCgpICsgXG4gIHlsYWIoXCJWZXJ5IGxvbmcgbGFiZWwgZm9yIHlcIikgKyBcbiAgdGhlbWUoYXhpcy50aXRsZS55PWVsZW1lbnRfdGV4dChhbmdsZT0wKSlcblxuXG5wMSA8LSBwICsgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfdGV4dChoanVzdD0wKSkgKyB4bGFiKFwiWC1heGlzIGF0IGhqdXN0PTBcIilcbnAyIDwtIHAgKyB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF90ZXh0KGhqdXN0PTAuNSkpICsgeGxhYihcIlgtYXhpcyBhdCBoanVzdD0wLjVcIilcbnAzIDwtIHAgKyB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF90ZXh0KGhqdXN0PTEpKSArIHhsYWIoXCJYLWF4aXMgYXQgaGp1c3Q9MVwiKVxuXG5saWJyYXJ5KGdyaWRFeHRyYSlcbmdyaWQuYXJyYW5nZShwMSwgcDIsIHAzKSJ9
Prova anche tu a vedere cosa succede definendo l’argomento vjust per cambiare il testo degli assi e come influisce sulla rappresentazione del grafico:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsaWJyYXJ5KGdncGxvdDIpXG5kZiA8LSBkYXRhLmZyYW1lKHg9YyhcImFcXG5hXCIsXCJiXCIsXCJjZGVmZ2hpamtcIixcImxcIiksXG4gICAgICAgICAgICAgICAgIHk9MTo0KVxucCA8LSBnZ3Bsb3QoZGYsIGFlcyh4LHkpKSArIGdlb21fcG9pbnQoKVxuXG5wMSA8LSBwICsgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KHZqdXN0PTAsIGNvbG91cj1cInJlZFwiKSkgKyBcbiAgICAgICAgeGxhYihcIlgtYXhpcyBsYWJlbHMgYWxpZ25lZCB3aXRoIHZqdXN0PTBcIilcbnAyIDwtIHAgKyB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQodmp1c3Q9MC41LCBjb2xvdXI9XCJyZWRcIikpICsgXG4gICAgICAgIHhsYWIoXCJYLWF4aXMgbGFiZWxzIGFsaWduZWQgd2l0aCB2anVzdD0wLjVcIilcbnAzIDwtIHAgKyB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQodmp1c3Q9MSwgY29sb3VyPVwicmVkXCIpKSArIFxuICAgICAgICB4bGFiKFwiWC1heGlzIGxhYmVscyBhbGlnbmVkIHdpdGggdmp1c3Q9MVwiKVxuXG5cbmxpYnJhcnkoZ3JpZEV4dHJhKVxuZ3JpZC5hcnJhbmdlKHAscDEscDIscDMpIn0=

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!

Argomenti
R
Data Science
Data Visualization

Scopri di più su R

Corso

Introduzione alla visualizzazione dei dati con ggplot2

4 ore
191.2K
Impara a creare visualizzazioni di dati significative e belle con ggplot2 capendo la grammatica della grafica.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow