How to plot multiple variables in one image
In questo post mostrerò come plottare più di una variabile in un unica immagine. Immaginiamo di avere 3 variabili che varino nel medesimo range di valori. Per il nostro esempio utilizzeremo il data set iris contenuto in R
Carichiamo il data set:
data(iris)
e diamo un occhiata al suo contenuto
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.30 Min. :2.00 Min. :1.00 Min. :0.1
## 1st Qu.:5.10 1st Qu.:2.80 1st Qu.:1.60 1st Qu.:0.3
## Median :5.80 Median :3.00 Median :4.35 Median :1.3
## Mean :5.84 Mean :3.06 Mean :3.76 Mean :1.2
## 3rd Qu.:6.40 3rd Qu.:3.30 3rd Qu.:5.10 3rd Qu.:1.8
## Max. :7.90 Max. :4.40 Max. :6.90 Max. :2.5
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
Nelle prime quattro colonne, abbiamo dunque 4 variabili continue i cui range di variazione, pur non essendo esattamente identici, hanno lo stesso ordine di grandezza.
La quinta colonna contiene invece una variabile categorica denominata ‘Species’ che, per il momento, trascureremo.
Rimuovo la colonna ‘inutile’
myiris<- iris[,-5]
La maniera più rapida per plottare queste variabili è di utilizzare la funzione matplot() del pacchetto graphics.
La funione matplot() vorrebbe come dato di input una matrice (o uno o più vettori). Tuttavia il nostro data set, che è un data.frame, può essere accettato perchè facilmente trasformabile in matrice
class(myiris) # qual è la classe del mio data set?
## [1] "data.frame"
Come diventerebbe se lo trasformassi in matrice?
str(as.matrix(myiris))
## num [1:150, 1:4] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
head(as.matrix(myiris))
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,] 5.1 3.5 1.4 0.2
## [2,] 4.9 3.0 1.4 0.2
## [3,] 4.7 3.2 1.3 0.2
## [4,] 4.6 3.1 1.5 0.2
## [5,] 5.0 3.6 1.4 0.2
## [6,] 5.4 3.9 1.7 0.4
Possiamo plottare
matplot(myiris, type= "l")
La funzione usa un colore ed una linea diversa per ogni variabile. Se volessi maneggiare arbitrariamente le diverse linee ed i rispettivi colori dovrei esplicitamente settare i relativi parametri:
Il seguente produce la stessa immagine di sopra ma mostra come, volendo, è possibile scegliere colori e linee diverse.
matplot(myiris, type= "l", lty= 1:4, col= 1:4)
Come aggiungo una legenda?
matplot(myiris, type= "l", lty= 1:4, col= rainbow(4),
ylab= "Variabili", xlab= "Individui")
legend(0, 8, c("Sepal lenght", "Sepal width",
"Petals lenght", "Petal width"),
lty= 1:4, col= rainbow(4))