Introducción a graficación en R

Anuncio
Introducción a graficación en R
> plot(modelo_lineal)
Instructor: Felipe González, ITAM. Septiembre, 2008
Resumen. Gráficos de datos en R: Cómo producirlos, refinarlos, y exportarlos (tradicional y lattice). GGobi para exploración de datos multivariados.
1.2
●
●
●
●
●●
●
●
●
●●
●
●
●
●●
●●● ● ●● ●
●● ● ●●
●
● ●●
●
●
●
●●
●
●●
●
●
●● ●●
●
●●
●
● ●● ●
●
● ● ●● ●● ●●●●●
●● ● ● ● ● ● ●●
● ● ●●●●●
●●●●
●
● ●● ●
●
●●●
●● ●
● ●●
●
●
●
●
●
●
●
●●
● ●
●
●
● ● ● ●● ●●
● ●
●
●
●
●
●
●●
●
●
●●
●
●●●●● ●
●
●
●●●
● ●
● ●
●●
●
●
●
●
●
●
● ● ●
●
●● ●● ●
●
●
● ●
●
●●
● ●
●●
●
● ●● ●●
●
●
●
●● ●
● ●
●● ●●
●
● ●● ●
● ● ●● ●
●
●
●●● ●●
●
●
● ● ●● ●
●
●
●
●
●
● ●
●
●● ●● ●
●● ●
●● ●
● ●
● ●
● ●● ●
●●●● ●
●
●
●
●●●
●●
●
●
●
● ●
●●
●
●
●
●
●
● ●
●
●● ●
●
●●
●
●
● ●
2
1
−3
35
●
● 21
−2
−1
0
1
2
Theoretical Quantiles
Residuals vs Leverage
● 21
2
●
●
● ●
●
●
●
●
●
●
●
●
10
15
20
1
●3
25
30
●
●
●
●
0
●
●
●
●
●
●
●
●
−1
1●
●
1
1●
0.5
●
0.5
−2
1.5
1.0
●
●
Standardized residuals
#región de 2x2 gráficas, definir márgenes
par(mfrow=c(2,2),mar=c(2.5,2.5,2.5,2.5))
#Colores
par(col.axis="gray30",fg="gray30",col="gray30")
#Arreglar etiquetas de eje vertical
par(las=1)
#Crear algunos datos
x<-seq(from=0,to=3,by=0.01)
z<-sin(x)
y<-z+0.1*rnorm(length(x))
#Graficar
plot(x,y,cex=0.5,col="red")
plot(x,y,type="l")
plot(x,y,type="p",cex=0.5)
lines(x,z,col="black",lwd=4)
plot(x,y,type="l")
points(x<-runif(10,0,3),y<-sin(x)+0.2*rnorm(10),pch=15,col="black")
text(1.5,0.2,"Este es un ejemplo")
●●●●
●●
●●
● ● ●●
●●
●
1
−3
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
30
●4
0.5
Usando par() podemos cambiar estos parámetros. Además de la función general plot, podemos agregar otros objetos con funciones como points, line,
y otras.
25
●
Fitted values
0.0
"bg"
20
0
0
−5
15
● 1●
Scale−Location
Standardized residuals
"ask"
●
−10
10
"adj"
"ann"
"cex.axis" "cex.lab"
●
●
●
21 ●
Gráficos simples. Para producir las gráficas más tradicionales y simples
en R (ver [5]) usamos la función plot. Los parámetros de graficación que usa
plot se pueden ver con la función par:
> head(names(par()),10)
[1] "xlog"
"ylog"
[7] "bty"
"cex"
●
●
●
●
●
●
●
4●
−1
3●
●
●
●
Standardized residuals
5
Maneras de hacer gráficos en R. Veremos ejemplos del paquete tradicional (para producir gráficas estadı́sticas estándar), de lattice (más enfocado
a datos multivariados) y de ggplot2 (una propuesta reciente). En cuanto a
los principios de graficación, todas las alternativas se basan principalmente
en el trabajo de Cleveland ([2],[3]). Otra referencia importante es [7].
Los gráficos en R se producen en dispositivos, que pueden ser ventanas
de nuestro sistema operativo o archivos (svg, pdf, png, etc.). El orden que se
sigue para hacer una gráfica es: abrir un dispositivo, establecer los parámetros de graficación, y luego hacer uno o varios pasos donde graficamos nuestros datos. Cuando trabajamos interactivamente (enviando comandos desde
la consola de R), si no abrimos explı́citamente un dispositivo, R abre una
ventana de gráficos del sistema.
Normal Q−Q
●4
−2
10
Residuals vs Fitted
35
●
Cook's21distance
0.00
0.10
0.20
En la gráfica de la izquierda cambiamos la presentación del eje horizontal
para graficar un objeto table:
> par_orig <- par(mfrow = c(1, 2), col.axis = "gray30",
+
col.lab = "gray30", fg = "gray30", col.main = "gray30",
+
las = 1, bty = "n")
> mis_par <- par()
> par(mis_par)
> tabla1 <- table(ratings2$a~
no)
> tail(tabla1, 10)
1999
7463
1.2
2000
7933
2001
9144
2002 2003 2004 2005 2006
9314 10170 10924 12473 10906
2007
7987
2008
2309
1.0
0.8
0.6
0.4
0.2
0.0
−0.2
●●
●●
●
●
●
●
●●
●
●
●
y
●
> class(tabla1)
0.8
[1] "table"
0.6
>
>
>
>
>
>
0.4
0.2
●
0.0
plot(tabla1, xlim = c(1900, 2008), ylab = "", xaxt = "n")
abline(v = 1945, lty = 2)
axis(side = 3)
par(xaxt = "s")
barplot(tabla1[121:129], horiz = TRUE)
par(par_orig)
−0.2
●
0.0
1.0
0.5
1.0
1.5
2.0
2.5
3.0
0.0
0.5
1.0
x
1.5
2.0
2.5
3.0
x
1900
●
●
1.0
0.8
0.6
0.4
0.2
0.0
−0.2
●
●
1.2
●●
●
●
●
●
●●
●
●
●
●●
●●● ● ●● ●
●● ● ●●
●
● ●●
●
●
●
●●
●
●●
●
●
●● ●●
●
●●
●
● ●● ●
●
● ● ●● ●● ●●●●●
●● ● ● ● ● ● ●●
● ● ●●●●●
●●●●
●
● ●● ●
●
●●●
●● ●
●
●
●
●
●
●
●
●
●
●
●●
● ●
●
●
● ● ● ●● ●●
● ●
●
●
●
●
●
●●
●
●●● ●
●●●●● ●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
● ● ●
●
●● ●● ●
●
●
● ●
●
●
●
● ●
●●
●
● ●● ●●
●
●
●
●●●●●
● ●
●●
●
● ●● ●
● ● ●● ●
●
●
●●● ●●
●
●
● ● ●● ●
●
●
●
●
●
● ●
●
●● ●●● ●
●● ●
●
●
●
●
●
●
● ●● ●
●●●● ●
●
●
●
●●●
●●
●
●
●
● ●
●●
●
●
●
●
●
● ●
●●
●● ●
●
●
●
●
● ●
●●
●●
●
●
●
●
●●
●
●
●
●
12000
1.0
10000
0.8
8000
0.6
6000
4000
0.4
2000
Este es un ejemplo
0.2
0
1940
1980
2008
2007
2006
2005
2004
2003
2002
2001
2000
0.0
0
2000
6000
10000
−0.2
●
0.0
y
1.2
0.5
1.0
1.5
2.0
2.5
3.0
0.0
0.5
1.0
1.5
2.0
2.5
3.0
donde adicionalmente mostramos una gráfica de barras. Otras gráficas estadı́sticas usuales son fáciles de producir, por ejemplo:
plot es polimórfica. Por ejemplo, si hacemos
> par(bg = "gray95", mfrow = c(2, 2), mar = c(2.5, 2.5,
+
2.5, 2.5), bty = "n")
> par(col.axis = "gray60", fg = "gray60", col = "gray30")
> modelo_lineal <- lm(stack.loss ~ Air.Flow, data = stackloss)
> class(modelo_lineal)
[1] "lm"
>
>
>
>
>
1
par(mis_par)
par(mfrow = c(1, 2))
x <- rgamma(1000, shape = 3)
hist(x, breaks = 20, freq = FALSE)
qqnorm(x, cex = 0.5)
Histogram of x
Bass 2
Bass 1
Tenor 2
Normal Q−Q Plot
Soprano 2
Soprano 1
●
12
0.25
Tenor 1
Alto 2
Alto 1
●
Density
0.20
0.15
0.10
0.05
6
4
2
0
2
4
6
8
10
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
● ● ●●
8
0.00
0
●
●
●
12
−3
x
−2
−1
0
1
2
0.15
Density
Sample Quantiles
●
10
3
Theoretical Quantiles
Ver más en [5].
0.10
0.05
●
●
●
●
0.00
El paquete lattice. El paquete lattice de R está hecho producir gráficas
multivariadas, y está implementado según ideas de Cleveland ([2]). La referencia [1] es excelente para aprender de este paquete.
55
60
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
65
●
●
●
●
70
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
75
80
height
En lattice tenemos diversas funciones estándar de graficación: 1) univariadas: barchart, bwplot, densityplot, dotplot, histogram, qqmath, stripplot, 2)
bivariadas: qq, xyplot, 3) trivariadas: levelplot, countourplot, cloud, wireframe, y 4) multivariadas: splom, parallel.
Nótese que la primer gráfica se especifica con una fórmula: height | voice.part, que se lee: hacer las gráficas de height condicionadas a cada valor
de voice.part. En el segundo caso, simplemente pedimos graficar height, pero
agregamos el parámetro group. Más en general, en la siguiente fórmula
Comenzamos con un ejemplo simple de [2]:
> library(lattice)
> names(singer)
[1] "height"
"voice.part"
> table(singer$voice.part)
Bass 2
26
Soprano 1
36
Bass 1
39
a + b + c ∼ d + e|f + g + h
Tenor 2
21
Tenor 1
21
Alto 2
27
Alto 1 Soprano 2
35
30
> print(histogram(~height | voice.part, data = singer))
queremos decir: graficar las variables a, b y c contra d y e, condicionado a
todos los posibles cruces de valores de f ,g y h, posiblemente separando por
grupos de una variable adicional. Otro ejemplo, usando diagramas de caja
y brazos (en donde también utilizamos trellis.par.set(), el equivalente de
par:
60
65
70
Soprano 2
Soprano 1
Tenor 1
Alto 2
75
40
30
20
10
0
Percent of Total
Alto 1
40
30
20
10
0
Bass 2
Bass 1
>
>
>
>
library(reshape)
load("./datos/ozono_2007.rdata")
names(ozono)<-c("fecha","hora","Lagunilla","Tacuba","ENEPAc","SAgustı́n","Azcapotz
ozono[1:4,1:4]
1
2
3
4
fecha hora Lagunilla Tacuba
01/01/07
1
0.008 0.006
01/01/07
2
0.002 0.007
01/01/07
3
0.002 0.007
01/01/07
4
0.002 0.009
Tenor 2
40
30
20
10
0
60
65
70
75
60
65
70
75
height
que podrı́amos también graficar con densidades, pero agrupando en lugar de condicionando:
> ozono_m<-melt(ozono,id=c(1,2))
> trellis.par.set(list(
axis.text=list(cex=0.6) , plot.symbol=list(cex=0.3) ))
> print(bwplot(hora~1000*value|variable,data=ozono_m,cex=0.3,xlab="O3 (partes x mil
> print(densityplot(~height, data = singer, groups = voice.part,
+
bw = 1.5, auto.key = list(columns = 3)))
2
0
hora
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
50 100 150 200
Chalco
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●●
●●
●
● ●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●●
● ●
●
●
●
●●
●
●
●●
●
●●
●
●● ●
●
●●●
●●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●●
● ●●
●●
●
●
●
●
●
●
●
●
●
●●
● ●●
●
●●
●
●
●●
●●●●
●
●●
●
●●
●
●
●●
●●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
● ●
●
●●
●●
●●
●●
●
●
●
●
●●
●
●
●
●●
●●
●
●
●
●●●●
●●
●
●●
●●
●
●
●●
●
●
●
●
●
● ●● ●
●
● ●●
●
●●
●
●
●
● ●
●
●
●●
● ●●
●
●●
●
●●
●
●●
●
● ●
●
●
●●●
● ●
●
●
●
●●
●
● ●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●
●
●●
●●
●●●
●
●
●●●
●
●
●
●
●
●
● ●● ●
●
●
●●● ●●●
● ●
●
●●●
●●●
●
● ●●
●
●●●
●●
●
●
●
●
●●
●
●●
●
●●●
●●
●
●●
●
●
●
●●
●
●
●
●
●●
●
● ●
●
●
●
●●
●●
●●
●●
●●
●
●
●●
●●●
●
●
●
●
●
●
●
●
●● ●
●●
●
●●
●
●
●
●
●●
●●●
● ●
●●
●
●●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●●
●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
● ●
●
●
●●
●
●
●
●
●●●●●●
●
●●
● ● ●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●●
● ●
●
●
●●
●
●
●●
●
●●
●●
●
●●
●
●●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●●
● ●
● ●●
●●
●
●
●●
●
●●
●
●
●
●●
●●
●
●
●
● ●
●●
●
●●
●
●
●●
●
●
●
●
●● ●
●
●
●
●
●●
●●●
●●
●
●●
●
●●●
● ●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
0
●
50 100 150 200
● ●
●
●
●
●
●
●
●
●
●
● ●
●
● ●
●
●●
●
●
● ●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
● ●
●
●
●●
●
●
●
●
●
●●●●
●●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●●
●
●●●
●
●
● ●
●●
●
●
●
●
●●
●●●
●●
●
● ●
●
●●
●●●●
●
●
●●
●●
●
●●
●
● ●
0
●
●
●●
●
●
●
●
●
●
●
●●
●●●
●●
●
●
●●●● ●
●●
●●
●
●
●●● ●●● ●
● ● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●● ●
●
●●
●
●
●
● ●●
●
●
● ●
●●●
●
●
●
●● ●
●●
● ●●
●●
●
●●
●●
●●●
●
●
●●
●●
●
●
●●●
●
●●
●
●
●
●
●
●
●
●
●
●●
● ●
●
●
●
●
●●
●●
●
●●
●
●
●
●
●
● ●
●
●●
●
●●●●●
●●
●●●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
Pedregal
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●●
●●
●
●
● ●
●
●
●
●●
●●
● ●
●
●
●
●
●
●
●
●●
● ●
●●
●
●●
●●
●●
●
● ●
●
●
●
●●●
●
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●●
●
●
SAgustín
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●● ●●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●●
●●
●
●●
●●
●●
●
●●
●
●●
●
●
●
●
●
● ●
●
● ●
●
●●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
● ●●
●
●
●
●
●
●
●●
● ●
●
●●
●
●
●●
●●
●
●
●
●
●●
● ●
●●
●●
●
●
●
●
●●
● ●●
●
●
●●
●●
●
●
●
●●
●
●
●
●
●
●
●●●
●
●●
●
●
●
●
●●
●●
●●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●●
●
●● ●
●●
● ●
●●
●
●●
●●●
● ●
● ●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
● ●
●●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●●
●
●●
● ●
●
●
●
●
●●
●●
●
●
●●●
●
●
●●
●
●●
●
●
●●
●
●
●●
Trebi
Wisconsin No. 38
No. 457
Glabron
Peatland
Velvet
No. 475
Manchuria
No. 462
Svansota
● ● ●
●
●
●
●
● ●
●●●
● ●
●
●●
●●
●●● ●● ●
● ● ●
●
●●
●●●
●
● ●●●
●
●
●●
●●
● ●
●
●
●
●
●
●
●●
●
●●
●
●●
● ●●
●
●
●●
●
●
●●
●
●
●
●●●
●●
●●●
●●
●
●●
●
●
● ●●
●
●
●●
●
●●
●
●
●
●● ●●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●●
50 100 150 200
●
0
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
Duluth
●
●●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●●
●●
●●
● ●
●
●
●
University Farm
Trebi
Wisconsin No. 38
No. 457
Glabron
Peatland
Velvet
No. 475
Manchuria
No. 462
Svansota
Azcapotzalco
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
Trebi
Wisconsin No. 38
No. 457
Glabron
Peatland
Velvet
No. 475
Manchuria
No. 462
Svansota
●
●
●●
●
●
●
●
●
●
●
●
●
●
CEstrella
●
●
●
●●
●
●
●
●
●
●
Morris
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
Trebi
Wisconsin No. 38
No. 457
Glabron
Peatland
Velvet
No. 475
Manchuria
No. 462
Svansota
Tlalpan
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●●
●
●
● ●
●●
●●
●
●
●●●●
●
●
●
●●
●●●
●●●
●
●
●
●
●
ENEPAc
●
●
Cuajimalpa
Merced
●
●
●
●
●
Crookston
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●● ●
●●●
● ●
●
●●
●
●●
●
●
●
●
●
●
●●●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●●
●
●
●
●●
●
●
●●
●
●●
●
●
●●
●● ●
●
●
●●
● ●
●
●
●
●●
● ●
●
●●● ● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
● ●
●●
●
●●
●
● ●
●●
●
●
●
●●
●●
●
●
●
●
●
●●
●●
●●
●
●
●
●
●●
●
●
●
●
● ●●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
● ●
●●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●●
●●
●
●●
●
●●
●
●●
●
●●
●
●●
●
●●
●
●
●
●
●
●●
●●
Tacuba
●
●
●
●●
●
●
● ●
●
●
●
●●
● ●
●●
●
●
● ●
● ●
●
●●
●●
●
●
●
●
●
●
●
● ●
●
●
●
●●
●
●
●● ●
●
●
●
●
●●●
●
●
●●
●
●
●
●●
●●
●
●●
●
●
●
●●
●
●●
●
●
●
●
●
●●
●
●
●
●
●●●
Taxqueña
●●
●●●●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●● ●
●
●●
●
●
●
●
●●
●●●
●
●
●
●
●
●●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●●
●
●●●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
● ●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●●
●
●●●●
●
●●●
●●
●●
●
●
●
●
●
●●●
●
●●
●●
●●
●
●
●●
●●
●
●
●
●
●●
●●
●
●●
●
●●
●
●
●
●
●●
●●
●
●●
●
●
●
●
●
●
●
●
● ●●
●●
●
●
●●
●
●●
●●
●
●●
●
●●
●
●
●
●
●●
●●
●●
●●
●
●
●●
●●
●
●
●●
●●
●
●
●
●●
●
●●
●
●●
●
●
●
● ●
●
●●●
●
●●●
●●
●
●
●
●●●
●
●
●
●●●
●
Xalostoc
●
●
●
●●
●
●
●●
●
●●
●
●
●
●
●
●
● ●
●●
●
●
●
●
●●●
●
●●
●●
●
●
●●
●●
● ●
●●
●
●
●●
●
●●
●●●
●
●
●
●
●
● ●
●
●●
●
●●
●
●●
●
●
●
●●
●
●
●
●●
●●● ●
●
●
●
●
●●●
●
●
●
●
● ●
●
●
●
●
●
●● ●
●
●
●
●
●
●●
●
●
●●●
●
●
●
●
●
●●
●
●
●
●●●
●
●
●
●
●●
●
●
●
●
●●
●●●
●
●
●
●●
●●
●
●
●
●●
●● ●
●
●
●
●●
●●
●● ●
●
●
●
●
●● ●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●●●
● ●
●
●
●
●
●●
●●
●
●
●
●
●
●●
●
●●
●●
●
●●
●●
●●
●
●
●
●●
●
●●● ●
●●
●●
●
●
●●
●
●
●
●
●
●●
● ●
● ●●
●●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●●
●
●
●●
●● ●
●
●
●
●●
●
●●
●
●
●
●●●●
●
●
●
●● ●
●
●
● ●
●
●
●
●
●
●●
●
●
UAMIzt
Lagunilla
● ●
●●●
●●
●
●
●
●
●●●
●
● ●●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●● ●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
Trebi
Wisconsin No. 38
No. 457
Glabron
Peatland
Velvet
No. 475
Manchuria
No. 462
Svansota
●
●
●●●
●
●
●
Waseca
●
●●
●
●●
●
●
●
●
●
●●
●
●●
●●
●
●
●●
●
●
●
●●
●
●
●
●
●●
●
●●
●
●
●
●●
●
●
●●
●
●●●
●●
●
●
●●●
●
●
●●
●
●
●
●
●●
●●●●
●●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●●
●●
●●
●●
●●
●●
●
●
●
●
●
●●
●●
●●
●
●●
●
●
●
●● ●
●
●●
●●
●
●●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
● ●
● ●
●
●●
●
●●
●●
●●
●
●
●
●●
●
●●●
●
●
●
●●
●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
Tlanepantla
●
●
●
●
●
●
●
Coyoacán
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●●
● ●
●
●
●●●●
●
●
●● ●
●
●●
● ●●
●
●●●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●●●
●
●
●
●
●
●
●
●●●
●●
●●
●●
●
●●
●
●●
●
●
Plateros
●
●
●
●
●
50 100 150 200
StaÚrsula
●
●
●
●
●
●
●
●
●●
● ●●
●
●● ●
●
●
●
●
●● ●●●
●●
●
●●●●
●
●
●●
●
●●
●
●●
● ●
●
●
●
Tláhuac
●
●
●
●
●
●●
●
0
●
●
●
●
●
●
●
●
●
●
Grand Rapids
●
Trebi
●
Wisconsin No. 38
●
No. 457
Glabron ●
●
Peatland
●
Velvet
No. 475 ●
●
Manchuria
●
No. 462
Svansota ●
50 100 150 200
O3 (partes x mil millones)
Los datos son de la red automática de monitoreo atmosférico del DF (SIMAT). Los dotplots son también útiles para gráficar tablas: ([2],[1]):
20 30 40 50 60
yield
> trellis.par.set(list(axis.text = list(cex = 0.6)))
> print(dotplot(variety ~ yield | site, data = barley,
+
layout = c(1, 6), aspect = c(0.7), groups = year,
+
pch = 1:2))
Referencias
Estos gráficos son muy flexibles. Las funciones que se encargan de dibujar cada panel se pueden modificar (o definir de cero) para agregar otros
elementos ([1]).
[1] D. Sarkar, Lattice: Multivariate Visualization with R, Springer, 2008.
[2] W. S. Cleveland, Visualizing Data, Hobart Press, 1993.
Exportando gráficas. Si queremos incluir nuestras gráficas en otros documentos, hay que abrir los dispositivos correspondientes. El formato más
conveniente en general el svg.
[3] W. S. Cleveland, The Elements of Graphing Data, Hobart Press, 1994.
[4] H.
Wickham,
ggplot2,
http://had.co.nz/ggplot2.
por
aparecer
en
Springer,
2009,
> library(RSvgDevice)
> devSVG(file = "salida.svg")
> print(plot(rnorm(100)))
[5] P. Murrell, R Graphics, Chapman & Hall, 2005.
NULL
[6] W.N. Venables, and B.D. Ripley, Modern Applied Statistics with S, 4th.
ed, Springer, 2003.
> dev.off()
[7] E. R. Tufte, The Visual Display of Quantitative Information, Graphic
Press, 2nd. ed, 2001.
pdf
2
El gráfico resultante es vectorial y puede cualquiera de sus aspectos puede
modificarse con programas como Illustrator o Inkscape. Se puede exportar
tambı́én a png, por ejemplo:
> png(file = "salida.png")
> print(plot(rnorm(100)))
NULL
> dev.off()
pdf
2
3
Descargar