-
Notifications
You must be signed in to change notification settings - Fork 0
/
16-Graficos.Rmd
250 lines (186 loc) · 7.62 KB
/
16-Graficos.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
Gráficos
========
```{r , child = '_global_options.Rmd'}
```
`R` dispone de varias funciones que permiten la
realización de gráficos. Estas funciones se dividen en dos grandes
grupos
- Gráficos de **alto nivel**: Crean un gráfico nuevo.
- `plot, hist, boxplot, ... `
- Gráficos de **bajo nivel**: Permiten añadir elementos (líneas, puntos, ...) a un
gráfico ya existente
- `points, lines, legend, text, ...`
- El parámetro `add=TRUE` convierte una función de nivel alto a bajo.
Dentro de las funciones gráficas de alto nivel destaca la función `plot`
que tiene muchas variantes y dependiendo del tipo de datos que se le
pasen como argumento actuará de modo distinto.
El comando plot
---------------
Si escribimos `plot(x, y)` donde `x` e `y` son vectores, entonces `R`
hará directamente el conocido como **gráfico de dispersión** que
representa en un sistema coordenado los pares de valores $(x,y)$.
Por ejemplo, utilizando el siguiente código
```{r cars1, fig.cap="Gráfico de dispersión de distancia frente a velocidad"}
data(cars)
plot(cars$speed, cars$dist) # otra posibilidad plot(cars)
```
`r latexfig("cars1")`
El comando `plot` incluye por defecto una elección automáticas de
títulos, ejes, escalas, etiquetas, etc., que pueden ser modificados
añadiendo parámetros gráficos al comando:
Parámetro | Descripción
---------- | -------------
`type` | tipo de gráfico:
\t | `p`: puntos, `l`: líneas, `b`: puntos y líneas, `n`: gráfico en blanco, ...
`xlim`, `ylim` | límites de los ejes (e.g. `xlim=c(1, 10)` o `xlim=range(x)`)
`xlab`, `ylab` | títulos de los ejes
`main, sub` | título principal y subtítulo
`col` | color de los símbolos (véase `colors()`)
\t | véase `col.axis`, `col.lab`, `col.main`, `col.sub`
`lty` | tipo de línea
`lwd` | anchura de línea
`pch` | tipo de símbolo
`cex` | tamaño de los símbolos
`bg` | color de relleno (para `pch = 21:25`)
Para obtener ayuda sobre estos parámetros ejecutar `help(par)`.
Veamos algún ejemplo:
```{r cars2, fig.cap="Gráfico de dispersión de distancia frente a velocidad, especificando título y etiquetas de los ejes"}
plot(cars, xlab = "velocidad", ylab = "distancia", main = "Título")
```
`r latexfig("cars2")`
```{r cars3, fig.cap="Gráfico de dispersión de distancia frente a velocidad, cambiando el color y el tipo de símbolo"}
plot(cars, pch = 16, col = 'blue', main = 'pch=16')
```
`r latexfig("cars3")`
## Funciones gráficas de bajo nivel
Las principales funciones gráficas de bajo nivel son:
Función | Descripción
------- | -----------
`points` y `lines` | agregan puntos y líneas
`text` | agrega un texto
`mtext` | agrega texto en los márgenes
`segments` | dibuja línea desde el punto inicial al final
`abline` | dibuja líneas
`rect` | dibuja rectángulos
`polygon` | dibuja polígonos
`legend` | agrega una leyenda
`axis` | agrega ejes
`locator` | devuelve coordenadas de puntos
`identify` | similar a `locator`
## Ejemplos
```{r}
plot(cars)
abline(h = c(20, 40), lty = 2) # líneas verticales discontinuas (lty=2)
# selecciona puntos y los dibuja en azul sólido
points(subset(cars, dist > 20 & dist < 40), pch = 16, col = 'blue')
```
```{r}
x <- seq(0, 2 * pi, length = 100)
y1 <- cos(x)
y2 <- sin(x)
plot( x, y1, type = "l", col = 2, lwd = 3, xlab = "[0,2pi]", ylab = "", main = "Seno y Coseno")
lines(x, y2, col = 3, lwd = 3, lty = 2)
points(pi, 0, pch = 17, col = 4)
legend(0, -0.5, c("Coseno", "Seno"), col = 2:3, lty = 1:2, lwd = 3)
abline(v = pi, lty = 3)
abline(h = 0, lty = 3)
text(pi, 0, "(pi,0)", adj = c(0, 0))
```
Alternativamente se podría usar `curve()`:
```{r}
curve(cos, 0, 2*pi, col = 2, lwd = 3,
xlab = "[0,2pi]", ylab = "", main = "Seno y Coseno")
curve(sin, col = 3, lwd = 3, lty = 2, add = TRUE)
```
## Parámetros gráficos
Como ya hemos visto, muchas funciones gráficas permiten establecer (temporalmente)
opciones gráficas mediante estos parámetros.
Con la función `par()` se pueden obtener y establecer (de forma permanente) todas las opciones gráficas.
Algunas más de estas opciones son:
Parámetro | Descripción
---------- | -------------
`adj` | justificación del texto
`axes` | si es `FALSE` no dibuja los ejes ni la caja
`bg` | color del fondo
`bty` | tipo de caja alrededor del gráfico
`font` | estilo del texto
\ | (1: normal, 2: cursiva, 3:negrita, 4: negrita cursiva)
`las` | orientación de los caracteres en los ejes
`mar` | márgenes
`mfcol` | divide la pantalla gráfica por columnas
`mfrow` | lo mismo que `mfcol` pero por filas
Ejecutar `help(par)` para obtener la lista completa.
Múltiples gráficos por ventana
------------------------------
En `R` se pueden
hacer varios gráficos por ventana. Para ello, antes de ejecutar la
función `plot`, se puede utilizar la función:
```{r, eval=FALSE}
par(mfrow = c(filas, columnas))
```
Los gráficos se irán mostrando en pantalla por filas. En caso de que se
quieran mostrar por columnas en la función anterior se sustituye `mfrow`
por `mfcol`.
Por ejemplo, con el siguiente código se obtiene el gráfico de la
siguiente transparencia.
```{r, results="hold", collapse=TRUE}
par(mfrow = c(2, 3))
plot(cars, pch = 1, main = "pch = 1")
plot(cars, pch = 2, main = "pch = 2")
plot(cars, pch = 3, main = "pch = 3")
plot(cars, col = "red", main = "col = red")
plot(cars, col = "blue", main = "col = blue")
plot(cars, col = "brown", main = "col = brown")
```
Para estructuras gráficas más complicadas véase `help(layout)`.
Exportar gráficos
-----------------------
Para guardar gráficos, en
Windows, se puede usar el menú `Archivo -> Guardar como` de la ventana gráfica (seleccionando el formato deseado: bitmap, postscript,...) y también
mediante código ejecutando `savePlot(filename, type)`.
Alternativamente, se pueden emplear ficheros como dispositivos gráficos. Por ejemplo, a continuación guardamos un gráfico en el fichero *car.pdf*:
```{r, eval=FALSE}
pdf("cars.pdf") # abrimos el dispositivo gráfico
plot(cars)
dev.off() # cerramos el dispositivo
```
Con el siguiente código guardaremos el gráfico en formato jpeg:
```{r, eval=FALSE}
jgeg("cars.jpg") # abrimos el dispositivo gráfico
plot(cars)
dev.off() # cerramos el dispositivo
```
Otros formatos disponibles son `bmp`, `png` y `tiff`. Para más detalles ejecutar:
```{r, eval=FALSE}
help(Devices)
```
Otras librerías gráficas
------------------------
Además de los gráficos estándar, en `R` están disponibles muchas librerías gráficas adicionales:
- Gráficos Lattice (Trellis)
- Especialmente adecuados para gráficas condicionales múltiples.
- No se pueden combinar con las funciones estándar.
- Generalmente el argumento principal es una formula:
- `y ~ x | a` gráficas de `y` sobre `x` condicionadas por `a`
- `y ~ x | a*b` gráficas condicionadas por `a` y `b`
- Devuelven un objeto con el que se puede interactuar.
- Más librerías gráficas:
- [ggplot2](http://had.co.nz/ggplot2)
- [rgl](http://rgl.neoscientists.org)
- [rggobi](http://www.ggobi.org/rggobi)
Para más detalles ver [CRAN Task View: Graphics](http://cran.r-project.org/web/views/Graphics.html)
### Ejemplos
```{r}
load("datos/empleados.RData")
library(lattice)
xyplot(log(salario) ~ log(salini) | sexoraza, data = empleados)
# Equivalente a xyplot(log(salario) ~ log(salini) | sexo*minoria, data = empleados)
```
```{r}
library(ggplot2)
ggplot(empleados, aes(log(salini), log(salario), col = sexo)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
ggplot(empleados, aes(salario, fill = sexo)) +
geom_density(alpha=.5)
```