Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Grafici con R

Una panoramica sull'uso delle principali funzioni messe a disposizione dal framework R per realizzare grafici sfruttando i contenuti di varie strutture dati
Una panoramica sull'uso delle principali funzioni messe a disposizione dal framework R per realizzare grafici sfruttando i contenuti di varie strutture dati
Link copiato negli appunti

Spesso si dice che un'immagine vale più di mille parole, e ciò vale anche in ambito scientifico e statistico, dove la moltitudine
dei dati rende spesso poco chiaro il messaggio che essi portano. Per questo, si usano spesso grafici di vario tipo per visualizzare in modo più immediato il contenuto informativo delle nostre analisi. R possiede al suo interno un ambiente di plotting che permette di realizzare grafici con le informazioni inserite nelle proprie strutture dati, e che sarà oggetto di questa lezione.

Primi esempi

Iniziamo a realizzare qualche script in cui la funzione plot mostri quanto velocemente possano essere rappresentati visualmente i nostri dati:

incassi <- c(1700, 858, 1834, 2100, 1652)
plot(incassi, type="l", col="green")
title(main="Incassi", col.main="blue", font.main="4")

L'immagine seguente mostra il risultato così ottenuto:

Figura 1. Grafico lineare a due dimensioni (click per ingrandire)

Grafico lineare a due dimensioni

Le direttive che vengono inoltrate ad R per ottenere un grafico di questo tipo coinvolgono innanzitutto la funzione plot, che traccerà il grafico di base e, successivamente, altre funzioni che ne descrivono via via il completamento. In questo caso, ad esempio, la funzione title ci ha permesso di specificare testo e font del titolo principale. Si noti, tra l'altro, il parametro type di plot, che con una sola lettera specifica il tipo di linea che vogliamo tracciare. Noi abbiamo optato per il valore "l" che utilizza segmenti per collegare i vari punti, ma avremmo potuto operare altre scelte, tra cui:

  • p per i punti;
  • h per degli istogrammi (colonne verticali);
  • s per dei gradini;
  • o per overplotted (punti con la linea del grafico che li taglia).

Proponiamo ora una versione più avanzata dello script appena visto:

incassiNegozioA <- c(1700, 858, 1834, 2100, 1652)
incassiNegozioB <- c(1945, 1254, 1341, 1657, 1402)
mesi <- c("Gen", "Feb", "Mar", "Apr", "Mag")
df <- data.frame(mesi,incassiNegozioA, incassiNegozioB)
plot(df$incassiNegozioA, type="b", lty="dashed", col="red", axes=FALSE, ann=FALSE)
lines(df$incassiNegozioB, type="l", col="blue")
title(main="Incassi", col.main="blue", font.main="4", xlab="Mesi", ylab="Euro")
box()
axis(1, at=1:5, lab=df$mesi)
axis(2, las=1, at=seq(min(incassi), max(incassi), 300))

ed il risultato sarà il seguente:

Figura 2. Grafico con due linee (click per ingrandire)

Grafico con due linee

Notiamo gli aspetti di maggior rilevanza:

  • i dati provengono da un data.frame e questo già è un aspetto importante in quanto molto spesso sarà proprio questa la struttura dati che utilizzeremo. Come si vede nello script, fare accesso alle singole colonne del data.frame non pone particolari
    difficoltà, in quanto sarà sufficiente usare l'operatore $ per indicare a quale di esse ci riferiamo;
  • sono presenti due linee: una continua ed una tratteggiate. La funzione plot disegna una di queste due, l'altra viene lasciata alla funzione lines;
  • la funzione plot è utilizzata in modo che non vengano nè etichettati nè disegnati gli assi di base (con i parametri axes=FALSE, ann=FALSE), e questo perchè abbiamo intenzione di disegnarli noi e non vogliamo che la forma che assegneremo si sovrapponga ad una preesistente;
  • la funzione title si occupa anche di etichettare gli assi del grafico e lo fa con gli attributi xlab e ylab;
  • l'invocazione a box serve a disegnare il riquadro intorno al grafico, in quanto questo è scomparso per effetto di axes=FALSE, sebbene gli assi che disegniamo non andranno a circoscrivere tutta l'immagine;
  • la funzione axis traccia i valori che saranno disposti sui due assi. Quello delle ascisse non farà altro che mostrare i valori contenuti in una delle colonne del data.frame, mentre l'altro sarà tracciato da una sequenza di numeri che cerca di coprire il livello dei dati inseriti, e tramite la funzione seq produce una sequenza che copre l'intervallo saltando 300 unità alla volta.

Altri tipi di grafici

I grafici lineari non sono l'unico tipo di grafico esistente, ed R permette di realizzarne di vari generi. Prendiamo ad esempio il grafico a torta, che mostra un cerchio suddiviso in spicchi, ognuno dei quali rappresenta una percentuale.

Il seguente script predispone un grafico a torta, sfruttando la funzione e pie:

incassi <- c(1945, 1254, 1341, 1657, 1402)
mesi <- c("Gen", "Feb", "Mar", "Apr", "Mag")
df <- data.frame(mesi,incassi)
pie(df$incassi, labels=df$mesi)

Questo il risultato che se ne ricava:

Figura 3. Grafico a torta (click per ingrandire)

Grafico a torta

R ci permette anche di modellare le etichette in maniera da avere anche la percentuale corrispondente alle singole fette. Sarà sufficiente eseguire un'operazione di questo tipo:

incassi <- c(1945, 1254, 1341, 1657, 1402)
etichette <- paste(incassi," (",round(incassi/sum(incassi)*100, 1), "%)")
pie(df$incassi, labels=etichette)

dove il testo delle etichette sarà frutto di un calcolo di proporzioni.

Figura 4. Grafico a torta con etichette ridefinite (click per ingrandire)

Grafico a torta con etichette ridefinite

Oltre a grafici a torta ve ne sono molti altri disponibili come:

  • grafici a barre verticali o orizzontali, in cui ogni barra rappresenta una quantità indicata nella serie numerica. La funzione che se ne occupa è barplot;
  • grafici a punti, ideali per rappresentare in maniera concisa la dispersione dei valori. Potranno essere prodotti con dotchart;
  • istogrammi, visualizzati mediante la funzione hist.

Un aspetto interessante è che i parametri che verranno coinvolti in tutte queste funzioni saranno gli stessi sia come denominazione sia come utilizzo, rendendo semplice ed uniforme l'uso pratico dei vari tipi di grafico disponibili.

Aggiungere una legenda

Ai fini della leggibilità del grafico, l'aggiunta di una legenda è spesso fondamentale. Immaginiamo di volerne creare una simile:

Figura 5. Creazione di una legenda (click per ingrandire)

Creazione di una legenda

Dovremo utilizzare la funzione legend, e questo sarà il codice necessario:

legend(1,2000,c("Incassi Negozio A", "Incassi Negozio B"), col=c("red","blue"), lty=c(3,1), pch=c(1, NA))

I parametri che passiamo sono:

  • le coordinate in cui verrà rappresentata la legenda. Nel nostro caso, abbiamo indicato 1 (l'ascissa) e 2000 (l'ordinata);
  • le etichette delle voci della legenda che qui abbiamo passato come vettore. Determina il numero di elementi che saranno in essa presenti;
  • il colore delle icone che abbiamo passato come vettore introdotto dalla proprietà col;
  • le icone sono costruite specificando la forma che deve apparirvi ed il tratto della linea. Per indicare la forma usiamo la proprietà pch a cui faremo corrispondere dei codici numerici, ognuno dei quali relativo ad una forma: qui abbiamo 1 che indica la circonferenza e NA che specifica di non indicare alcuna forma. Con lty comunichiamo il tipo di linea che vogliamo avere: nell'esempio sarà tratteggiata la prima e continua la seconda. Per venire a conoscenza di tutti i codice numerici disponibili, si può consultare la documentazione ufficiale in merito alla funzione legend.

Conclusioni

Abbiamo visto in questa lezione gli strumenti di base per creare grafici in R. Esistono molte tipologie di grafici, e la loro utilità dipende molto dal caso d'uso specifico.

Si consideri, inoltre, che esistono altri package oltre a quelli "di serie", che possono essere integrati nei nostri script e reperiti con facilità su Google: tali ulteriori alternativi possono portare beneficio sia dal punto di vista funzionale che da quello estetico.


Ti consigliamo anche