What about privacy ? :)

Sign by Danasoft - For Backgrounds and Layouts

giovedì 19 marzo 2015

How to plot multiple variables in one image using base plot

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

plot of chunk unnamed-chunk-6 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)

plot of chunk unnamed-chunk-7

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

plot of chunk unnamed-chunk-8