-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path021_03_graphiques.Rmd
174 lines (147 loc) · 8.25 KB
/
021_03_graphiques.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
# Paquetes gráficos {#graph3}
## Los paquetes con paletas
### `RColorBrewer`
El paquete `RColorBrewer` es un paquete de referencia porque contiene paletas adicionales a las disponibles en la versión básica de R. Una vez que el paquete está instalado, solo llamamos a las paletas para utilizarlas. Aquí están las paletas disponibles y un ejemplo de uso.
```{r 021-03-graphiques-1}
pkgCheck <- function(x){
if (!require(x, character.only = TRUE)){
install.packages(x, dependencies = TRUE)
if(!require(x, character.only = TRUE)) {
stop()
}
}
}
pkgCheck("RColorBrewer")
display.brewer.all()
boxplot(matrix(rnorm(1000), ncol = 10),
col = brewer.pal(10, "Paired"), axes = FALSE)
```
### `palettesForR`
El paquete `palettesForR` es otro paquete que contiene paletas listas para usar de los proyectos 'Gimp' y 'Inkscape'. Una vez que el paquete está instalado, solo llamamos a las paletas para utilizarlas. Las muchas paletas disponibles se enumeran en la ayuda del paquete (hay 48 paletas). Aquí hay un ejemplo de uso.
```{r 021-03-graphiques-2}
pkgCheck <- function(x){
if (!require(x, character.only = TRUE)){
install.packages(x, dependencies = TRUE)
if(!require(x, character.only = TRUE)) {
stop()
}
}
}
pkgCheck("palettesForR")
showPalette(Echo_gpl)
groupTest <- sample(1:3, size = 100, replace = TRUE)
valueTest <- sample(1:7, size = 100, replace = TRUE)
tableTest <- table(groupTest, valueTest)
barplot(tableTest,
col = Echo_gpl, axes = FALSE, beside = TRUE)
groupTest <- sample(1:3, size = 100, replace = TRUE)
valueTest <- sample(1:7, size = 100, replace = TRUE)
tableTest <- table(groupTest, valueTest)
barplot(tableTest,
col = Tango_gpl, axes = FALSE, beside = TRUE)
```
### Otros paquetes
Hay muchos paquetes que contienen paletas. Por ejemplo :
* `viridis` (https://CRAN.R-project.org/package=viridis)
* `jcolors` (https://CRAN.R-project.org/package=jcolors)
* `scico` (https://CRAN.R-project.org/package=scico)
* ...
## ggplot2 package
El paquete `ggplot2` es una alternativa a las funciones básicas de R para realizar gráficos. Se basa en "La Gramática de Gráficos" Leland Wilkinson y permite gráficos en capas, por lo general con un resultado superior si consideramos el aspecto estético en comparacion con las funciones básicas de R. Si para explorar un conjunto de datos `ggplot2` es a veces más potente, nuestros gráficos nunca vienen solas y se acompañan de análisis estadísticos que a menudo exigen un trabajo minucioso sobre la gestión de datos. Una vez que nuestras hipótesis de trabajo estan probadas estadísticamente, resulta fácil realizar gráficos cual que sea su nivel de complejidad (con las funciones básicas o con `ggplot2`). Además veremos en el siguiente capítulo que desde la gráfica a la figura en el artículo científico, hay una serie de tratamientos a realizar y el manejo de los parámetros estéticos se puede hacer de forma independiente de R. Así que `ggplot2` es un paquete interesante porque ofrece una alternativa con una filosofía diferente en la construcción de gráficos, pero no reemplaza lo que hemos aprendido hasta ahora. En la práctica podemos utilizar uno u otro en función de los datos y de las manipulaciones que queremos hacer.
Para volver a `ggplot2`, empezamos con un ejemplo con los datos `iris`.
```{r 021-03-graphiques-3}
pkgCheck <- function(x){
if (!require(x, character.only = TRUE)){
install.packages(x, dependencies = TRUE)
if(!require(x, character.only = TRUE)) {
stop()
}
}
}
pkgCheck("ggplot2")
data(iris)
# ggplot2
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width))
p + geom_point() + ggtitle("ggplot2")
# base
plot(x = iris$Sepal.Length, y = iris$Sepal.Width,
main = "base", pch = 16)
```
Ahora separemos la información según las especies de flores.
```{r 021-03-graphiques-4}
# ggplot2
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
p + geom_point() + ggtitle("ggplot2")
# base
plot(x = iris$Sepal.Length, y = iris$Sepal.Width,
main = "base", pch = 16, col = iris$Species)
```
Parece haber una relación entre el ancho y el largo de los sépalos por especie.
```{r 021-03-graphiques-5}
# linear regressions
lmFits <- lapply(1:3, function(i){
fitSp1 <- lm(iris$Sepal.Width[as.numeric(iris$Species) == i] ~
iris$Sepal.Length[as.numeric(iris$Species) == i])
fStat1 <- summary(fitSp1)$fstatistic
rSq1 <- summary(fitSp1)$r.squared
pVal1 <- summary(fitSp1)$coefficients[2, 4]
stat1 <- paste0("F=", round(fStat1[1], digits = 2),
"; DF=", fStat1[2], "/", fStat1[3], "; r-sq=", round(rSq1, digits = 2),
"; p-val=", round(pVal1, digits = 6))
return(list(fitSp1, stat1))
})
# ggplot2
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
p <- p + geom_point() + ggtitle("ggplot2") + stat_smooth(method = "lm", se = FALSE)
p <- p + annotate(geom = "text", x = 6, y = 2.250, label = lmFits[[1]][[2]], colour = 2)
p <- p + annotate(geom = "text", x = 6, y = 2.125, label = lmFits[[2]][[2]], colour = 3)
p <- p + annotate(geom = "text", x = 6, y = 2.000, label = lmFits[[3]][[2]], colour = 4)
p
# base
plot(x = iris$Sepal.Length, y = iris$Sepal.Width,
main = "base", pch = 16, col = iris$Species)
abline(lmFits[[1]][[1]], col = 1)
abline(lmFits[[2]][[1]], col = 2)
abline(lmFits[[3]][[1]], col = 3)
text(x = 5.5, y = 2.2, labels = lmFits[[1]][[2]], pos = 4)
text(x = 5.5, y = 2.1, labels = lmFits[[2]][[2]], pos = 4, col = 2)
text(x = 5.5, y = 2.0, labels = lmFits[[3]][[2]], pos = 4, col = 3)
```
Podemos ver en estos ejemplos que los gráficos con `ggplot2` comienzan con una llamada a la función `ggplot()`, en la cual el primer argumento `datos` coincide con nuestros datos (generalmente un `data.frame`), y El segundo argumento `aes()` es la información que queremos usar. Por convención, esta información se almacena en un objeto `p`. Luego agregaremos capas adicionales usando `+`.
En las capas podemos agregar aspectos geométricos (el tipo de gráfico, por ejemplo, `geom_point()`), estadísticas (por ejemplo, `stat_smooth()`), anotaciones (por ejemplo, `annotate()`), y otras cosas relacionadas con los ejes, los colores, ... La documentación completa se puede consultar en la dirección https://ggplot2.tidyverse.org/ (hoja de resumen: https://github.com/rstudio/cheatsheets/blob/master/data-visualization-2.1.pdf). Muchas extensiones a `ggplot2` están disponibles en http://www.ggplot2-exts.org/gallery/.
## Gráficos interactivos y dinámicos con `Plotly`
`Plotly` es un paquete para gráficos interactivos y dinámicos. Esto puede ser particularmente útil para los resultados que se difunden a través de Internet. El paquete se instala como cualquier otro con `install.packages("plotly")`. El paquete es gratuito y de código abierto.
Este ejemplo se ha copiado del libro de Carson Sievert (https://plotly-book.cpsievert.me). El código usado para hacer este gráfico está licenciado bajo la licencia de Estados Unidos Creative Commons Attribution-NonCommercial-NoDerivs 3.0 (Carson Sievert; https://creativecommons.org/licenses/by-nc-nd/3.0/us/).
```{r 021-03-graphiques-6, echo = FALSE, message = FALSE, warning = FALSE}
pkgCheck <- function(packages){
for(x in packages){
try(if (!require(x, character.only = TRUE)){
install.packages(x, dependencies = TRUE)
if(!require(x, character.only = TRUE)) {
stop()
}
})
}
}
pkgCheck(c("plotly", "gapminder"))
p <- gapminder %>%
plot_ly(
x = ~gdpPercap,
y = ~lifeExp,
size = ~pop,
color = ~continent,
frame = ~year,
text = ~country,
hoverinfo = "text",
type = 'scatter',
mode = 'markers'
) %>%
layout(
xaxis = list(
type = "log"
)
)
p
```
## Conclusión
Este capítulo nos permitió ver otras opciones gráficas y, en particular, los paquetes `ggplot2` y `plotly`. Existen libros específicos (en inglés) que cubren todos los aspectos de estos paquetes, aquí el objetivo es saber que existen estas opciones para usarlos si es necesario. Los sitios web "Data to Viz" y "r-graph gallery" (https://www.data-to-viz.com; https://www.r-graph-gallery.com/) son buenos recursos para tener ideas de las posibilidades que ofrece R en cuanto a representaciones gráficas. El siguiente capítulo analiza los procesos necesarios para transformar un gráfico R en una figura publicable en un artículo científico. Hasta muy pronto !