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:
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:
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 funzionelines
; - la funzione
plot
è utilizzata in modo che non vengano nè etichettati nè disegnati gli assi di base (con i parametriaxes=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 attributixlab
eylab
; - l'invocazione a
box
serve a disegnare il riquadro intorno al grafico, in quanto questo è scomparso per effetto diaxes=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 funzioneseq
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:
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.
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:
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. Conlty
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 funzionelegend
.
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.