Applicazioni di informatica nella
ricerca Psicosociale, avanzato
nella elaborazione di dati campionari
Corso di Laurea Magistrale in Psicologia Sociale, del
Lavoro e della Comunicazione
(Introduzione all’uso della grafica in R )
Crivellari Franco
Introduzione alla grafica di R

Sistemi grafici disponibili in R
 Sistema base standard
> plot.new()
> rect(0.2,0.2,0.6,0,4)
> box()


Il Sistema di coordinate e loro trasformazione in scala
Sistema grafico “grid” (di basso livello)
> library(grid)
> grid.newpage()
> grid.rect(gp=gpar(fill="grey"))
> grid.circle(x=0.5, y=0.5, r=0.5, default.units="npc",
name=NULL, gp=gpar(), draw=TRUE, vp=NULL)

Sistema grafico “lattice” (usato in S)
> data(cats, package="MASS")
> library(lattice)
> xyplot(Hwt~Bwt|Sex, data=cats)
> histogram(~Bwt|Sex, data=cats)
> densityplot(~Bwt|Sex+equal.count(Hwt, 4), data=cats)
24/03/2010
© Franco Crivellari
2
Il sistema grafico usato per
default da R

Il sistema di base utilizza comandi:
 di alto livello per generare grafici completi di assi, titoli, etc.
> data(iris)
> hist(iris$Sepal.Length,breaks=c(3,4.5,6,6.5,7,9),col="gray")


I comandi a basso livello sono usati per:

aggiungere particolari ad un grafico già disegnato
per creare un nuovo grafico da zero: funzione plot.new()

per consentire l’interazione con l’utente


A volte i comandi di alto livello sono usati solo per indicare quale
sistema di coordinate usare nel disegno
parametri grafici utilizzabili nei comandi:


di alto livello
di basso livello
3
24/03/2010
© Franco Crivellari
Comadi di alto livello:

Esistenza di comandi anche generici: es. plot()

Caratteristica: iniziano generando sempre una nuova immagine

Sono progettati per realizzare grafici completi sulla base delle informazioni
fornite loro in argomento:
 Oltre a scegliere il grafico più opportuno, disegnano in genere per
default anche:
 gli assi cartesiani
 le etichette sugli assi
 i titoli da aggiungere agli assi

Ma soprattutto calcolano la (o le) scale di valori da usare negli assi delle
ascisse (X) e delle ordinate (Y) nel disegno

A volte vengono usati non per disegnare, bensì solo per calcolare quali scale di
valori sono usatee nel grafico. Ad es.:
> plot.new() # Grafico vuoto, coord. tra 0 e 1
> plot(0, type="n", xlim=c(0, 10), ylim=c(20,30), axes=F, xlab="", ylab="")
24/03/2010
© Franco Crivellari
4
funzione plot()

è un comando generico di alto livello, il tipo di grafico generato dipende dal
tipo di informazione passata attraverso il primo argomento:

plot(x): se x è un





24/03/2010
vettore numerico, produce un grafico che presenta i valori rispetto alle loro
posizioni
vettore di tipo fattore, genera un grafico a barre delle freq. assolute [barplot()]
plot(y~x):


(vedi)
se ambedue i vettori sono numerici, genera un diagramma di dispersione di y
rispetto a x; questa forma equivale a: plot(x, y)
se x è di tipo fattore e y è numerico, genera boxplot di y per ciascun livello di x
se ambedue sono fattori, genera un grafico a barre sovrapposte di tipo
barplot(), in cui le modalità della var indip. (x) sono indicate in ascissa, mentre
appaiono in forma sovrapposta le corrispondenti frequenze riguardanti la var
indicata come dipendente (y)
plot(df): se df è un data frame: opera come pairs()
© Franco Crivellari
5
le funzioni pairs() e coplot()

pairs(df): se df è un data frame o una matrice


pairs(df) produce una matrice (n per n) di diagrammi di
dispersione (uno per ciascuna combinazione di variabile
presente)
la funzione coplot(formula, data=df)


24/03/2010
se la formula è: y ~ x | f (dove x e y sono var. numeriche
mentre f di tipo fattore), in una unica immagine sono generati
più diagrammi di dispersione, uno per ciascun valore di f
se la formula è: y ~ x | f + g (dove x e y sono var. numeriche
mentre f e g sono di tipo fattore), n una unica immagine sono
generati più diagrammi di dispersione, uno per ciascun
combinazione di f e di g
© Franco Crivellari
6
altre funzioni di alto livello
qqnorm(x)
 grafica la distribuzione di x rispetto alla corrispondente distribuzione
normale che possiede la stessa media e la stessa varianza
qqplot(x, y)
 grafica i quantili di x rispetto ai corrispondenti di y in modo da
verificare se ambedue le var. si distribuiscono nello stesso modo



dotchart(x)
 sulle ordinate è indicata la posizione dei dati, sulle ascisse i loro
valori

hist(x)


istogramma in base ai valori di x; la suddivisione è legata al
parametro passato a breaks=
curve(espressione, da a, …)
7
24/03/2010
© Franco Crivellari
Parametri locali usabili nelle
funzioni grafiche di “alto livello”





main=“ stringa” : titolo
# intestazione della figura in alto
sub=“stringa” : sottotitolo
# in basso sotto l’intestaz. delle ascisse
xlim=c(xmin, xmax) e ylim=c(ymin, ymax)
xlab=“stringa”, ylab=“stringa” da inserirexlim sotto l’asse delle X o a sin.
delle Y
type=






“p” punti
(esempi)
“l” linee
“b” punti connessi da linee (both)
“o” punti sovrapposti a linee
“h” linee verticali che partono dall’ascissa
“n” non disegna nulla; le assi sono però disegnate e la scala di coordinate è
calcolata

axes=F sopprime la generazione degli assi

log=“x”, oppure “y”, oppure “xy”
add=T richiede di aggiungere il grafico e non di crearne uno nuovo

24/03/2010
© Franco Crivellari
8
Altri parametri utili

Sono disponibili altri parametri che consentono di
modificare le linee o i simboli che appaiono:

pch=n oppure “ch”: dove se n è intero, individua un
carattere (vedi pag. 232 del testo), se è un carattere, viene
usato proprio quello!

lwd=n: larghezza delle linee tracciate

col=“colore”: nome del colore in inglese

lty=n o “indicazione inglese”: tipo di linea (vedi pag. 210)
24/03/2010
© Franco Crivellari
9
Come si struttura una immagine
24/03/2010
Regione interna
© Franco Crivellari
Margine esterno 1
Margine esterno 4
Margine esterno 2
Margine esterno 3
10
20
10
4
5
6
7
8
0.4
Prima immagine
lato destro
0.8
Sepal.Length
0.0
0.2
0.4
primo disegno
Con solo
comandi a
basso livello
Grafico
ottenuto con
un comando
ad alto livello
0
0.6
0.8
Frequency
30
1.0
Disegno su parti diverse dello schermo
0.0
0.0
0.0
24/03/2010
0.4
0.2
0.8
0.4
0.6
© Franco Crivellari
0.8
1.0
11
Comandi grafici a basso livello
Per disegnare nella parte interna dell’immagine:








text(x,y, “testo”, …)
points(vx, vy, …)
lines(vx, vy, …)
arrows(x0, y0, x1,y1, …)
polygon(vx, vy, …)
segments(x0, y0, x1, y1, …)
box()
abline(a, b, [oggetto]…)
Margine esterno 3
Margine esterno 4

Margine esterno 2

Regione interna
Per disegnare nei margini:


24/03/2010
mtext(‘’testo”, lato, linea)
axis(lato, …)
© Franco Crivellari
Margine esterno 1
12
Parametri grafici:

Permanenti, cioè validi fino alla chiusura della finestra
grafica, o fino a quando si cambia nuovamente il parametro

par(parametro=, …)

new= richiede che il prossimo comando ad alto livello
NON crei una nuova immagine



Temporanei: cioè scelti quando si attivano le
funzioni grafiche ad alto o a basso livello:






24/03/2010
fig= c(xbl,ybl,xur,yur) definizione di una finestra interna
mar= c(v1,v2,v3,v4) dimensione in righe dei 4 margini
col
lwd
lty
font
pch
srt
colore delle linee o del testo
larghezza della linea
tipo della linea
fonte di caratteri (plain, bold italic)
tipo di simbolo
rotazione [NB: solo per text(), valore in gradi]
© Franco Crivellari
13
Comandi di basso livello per
disegnare all’interno della regione

sono usati per disegnare nuove immagini o per “aggiungere” particolari ad un
disegno già iniziato

primitive disponibili: dove x, y sono vettori di coordinate
 points(x, y, type=“ch”, …)
# default: type=“p”
 lines(x, y, type=“ch”, …)
# default: type=“l”
 abline(a, b), o abline(h=x), o abline(v=x), ….
 qqline(x)
 rect()
 text(xv, yv, labels=“testo”,srt=45, …) # aggiunge testi nei punti indicati
polygon(xv, yv, …)
 grid(nx, ny, …)
# sovra disegna una griglia


disegna il poligono indicato dai due vettori di coordinate (xvi, yvi)
solo i poligoni chiusi possono avere l’interno colorato o tratteggiato
polygon(x, y, density = NULL, angle = 45, border =, col =, density=, ...)
24/03/2010
© Franco Crivellari
14
Inserimento di un tratteggio o
di una colorazione

Solo le figure chiuse possono essere internamente
colorate o tratteggiate:

rect(x1, y1, x2, y2, …)
 color=“red”
 border=“blue”
 density=30
# linee per inch (per il tratteggiato)
 angle=45
# gradi (per il tratteggiato)

polygon(x, y, … )
 La funzione provvede a chiudere la figura connettando, con
una linea, il punto di partenza con quello di arrivo
24/03/2010
© Franco Crivellari
15
Altri comandi di basso livello




segments(x0, y0, x1, y1)
# aggiunge segmenti di linea ad un disegno
arrows(xi, yi, xf, yf)
# aggiunge freccie orientate ad un disegno
title(main=“testo” , sub=“testo”)
legend(x,y, legend=)

nel caso al parametro legend= sia passato un vettore di etichette, deve
essere anche fornito come ulteriore parametro un altro vettore, della stessa
lunghezza del precedente, utilizzando uno dei seg. parametri:









fill=v # colore del riempimento
col=v # colore dei punti o delle linee
lty=v # stile delle linee
lwd=v # larghezza del tratto delle linee
pch=v # caratteri disegnati
title(main=, sub=)
box(which=“plot”, …)
axis(side, …)
mtext(“testo”, side=, line=)
24/03/2010
# side= da 1 a 4 verso orario dal basso
# line= 0, 1, 2, (pos. righe verso esterno)
© Franco Crivellari
16
usando solo plot.new e com. basso livello
0.4
0.6
0.8
1.0
(0
.
1.0
0.2
9,
0.
9)
0.0
0.6
0.8
(0.4,0.8)
(0.2,0.3)
1,
0.
1)
(0.8,0.2)
0.0
(0
.
punta
0.2
0.4
(0.1,0.5)
Esempio di lucido
24/03/2010
© Franco Crivellari
17
15
20
25
30
vettore y: 15, 21, 23, 30, 20, 24, 17, 12, 11.3
punto con minimo y
2
24/03/2010
3
4
5
6
7
vettore x: 2, 2.5, 3, 5, 8, 4, 7, 2, 6.1
© Franco Crivellari
8
18
-1
0
1
2
funzione dnorm(x)*3 con x da -5 a 5
-5
24/03/2010
-4
-3
-2
-1
0
© Franco Crivellari
1
2
3
4
5
6
19
par( mar=c(5.1, 4.1, 4.1, 2.1), col=“blue”)
18
riga 0
riga 1
16
14
12
10
Valori da 11 a 20 in linea 3
20
Primo esempio
0
1
2
3
© Franco Crivellari
24/03/2010
4
5
6
riga 2
riga 3
riga 4
7
8
9
10
20
Altro disegno
Tratto da Paul Murrel (Univ. Auckland):
barplot(matrix(sample(1:4, 16, replace=T),ncol=4),
angle=45, density=1:4*10, col="blue",
legend=paste(“Gruppo”,1:4))
8
2
par(fig=c(0.8, 1, 0, 1), mar=c(4, 0, 4, 1), new=T)
plot(0, xlim=c(0, 1), ylim=c(0, 5), axes=F,
xlab="", ylab="", type="n")
legend(0, 4, legend=paste("Gruppo",1:4),
density=1:4*10)
Gruppo 1
Gruppo 2
Gruppo 3
Gruppo 4
6
# crea area per disegnare la legenda in posizione
esterna alla barplot
4
# Disegna una barplot.
barplot(matrix(sample(1:4, 16, replace=T),ncol=4),
angle=45, density=1:4*10, col=“blue”)
10
# Oppure si crea un’area a lato per disegnare barplot,
lasciando il posto per la legenda
par(fig=c(0, 0.75, 0, 1), mar=c(4, 2, 4, 0))
© Franco Crivellari
24/03/2010
0

21
2.5
Anderson Iris data
1.5
1.0
0.5
Petal width (cm)
2.0
Three species of Iris
setosa
versicolor
virginica
1
2
3
4
5
6
Petal length (cm)
Centroids: mean (verde) and median (blu)
7
Parametri grafici con par()

La funzione par(…) definisce o modifica parametri
grafici in modo permanente, cioè fino a quando non
si chiude la finestra grafica, oppure non viene dato
un nuovo comando par()

possibilità di ricordare i parametri usati precedentemente:
> oldpar<-par(lty=2, col=“blue”)


La lista parziale dei parametri utilizzabili è illustrata a
pag. 230, o sono ottenibili richiedendo ?par
I parametri ritornano al loro valore iniziale


quando si chiude la finestra grafica
quando si passa alla funzione par() i parametri salvati
precedentemente
> par(oldpar)
24/03/2010
© Franco Crivellari
23
Generare più grafici
in aree diverse della stessa dimensione:

1.0
0.5
-1.5
-1.0
-0.5
0.0
0.5
0.0
-0.5
-1.0
-1.5
10
15
20
5
10
15
20
0
0.0
0.5
2
1.0
4
1.5
5
-1.0
-2
-0.5
Esempio
par(mfrow=c(2, 2), mar=c(2, 2,
1, 1), cex=0.6)
y <- rnorm(20)
plot(y, type="l", lwd=3)
plot(y, type="l", col=“red")
plot(y, type="l", lty="dashed")
plot(y, type="l", ylim=c(-4, 4))
1.0
1.5

par(mfrow=c(n,m), mar=c(nr1,nr2,nr3,nr4))
par(mfcol=c(n,m), mar=c(…))
1.5

© Franco Crivellari
24
-4
-1.5
24/03/2010
5
10
15
20
5
10
15
20
Più grafici in aree diverse
Parametri fig e di mar
10 15
Velocit‡ dei veicoli
0
par(fig=c(0.0,0.7,0.0,0.7), mar=c(4,4,2,1),
cex=0.8)
plot(dist~speed, data=cars, pch="*")
title("Lung. frenata rispetto al velocità")
5

Frequency
0
par(fig=c(0.0,0.7,0.7,1), mar=c(2,4,2,2),
cex=0.7, new=T)
hist(cars$speed,col="red",breaks=5,
main="Velocità dei veicoli")
5
10
15
20
25
Lung. Frenata
(100,120]
120
Lung. frenata rispetto alla velocità
100
*
60
*
*
* *
*
*
*
*
* *
*
* *
*
* * * * * *
* * ** * * *
*
* * *
*
40
*
*
*
*
*
*
*
*
*
*
5
(60,80]
*
20
par(fig=c(0.7,1,0.05,0.7), mar=c(2,2,2,2),
cex=0.7, new=T)
rdist<-hist(cars$dist, breaks=6, plot=F)
tcut<-cut(cars$dist, breaks=rdist$breaks)
barplot(table(tcut),horiz=T, col="blue",
24/03/2010
© Franco Crivellari
main="Lung. Frenata")
*
*
*
(0,20] (20,40]
80
*
0

generando 3 grafici diversi in parti
diverse della medesima immagine:
Da notare l’uso del parametro new=T e
l’uso di hist() per il calcolo degli intervalli
di classe
dist

25
10
15
speed
20
25
0
5
10
15
Scarica

Diapositiva 1