```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# Introducción a gráficos con R

El lenguaje de programación R es muy poderoso para la generación de gráficos. Existen varios paquetes gratuitos para instalar con los comandos usuales y que facilitan la creación de gráficos de distinta naturaleza y con sintaxis muy diferentes. Algunos de los más populares son:

1. `graphics`. Es el paquete de gráficos por defecto en R. Normalmente se crea un gráfico base con la función `plot` y después se añaden otros componentes como texto, puntos, leyenda y guía de colores.
2. `scatterplot3d`. Es un paquete que permite crear gráficos de dispersión en tres dimensiones y utiliza la misma sintaxis que `graphics`
3. `lattice`. Su sintaxis está basada ampliamente en `graphics` y facilita la presentación de datos multivariados mucho mejor que `graphics`. También tiene funciones para crear gráficos en 3d.
4. `ggplot2`. Es uno de los paquetes gráficos más modernos y potentes y con la sintaxis más diferente de todos, pero al mismo tiempo muy asequible. Está pensado en ciencia de datos por lo que es muy potente para gráficos de datos multivariados.
5. `plot3D`. Es un paquete muy potente para generar todo tipo de gráficos en 3d, aunque su sintaxis es la tradicional del paquete `graphics`.

Aquí nos enfocaremos en usar `graphics` y `ggplot2`, por ser los más populares, el primero por la larga tradición con que ya cuenta y el segundo por moderno, potente y popular.

## Tipos de gráficos

Existen muchos tipos de gráficos y herramientas visuales para ayudarnos a hacer un análisis exploratorio, representar nuestros resultados ó comunicar algonimportanto que nuestros datos representan. Los gráficos pueden representar ciertas características de una sola variable, de dos o relaciones entre dos conjuntos. Por ejemplo los **gráficos de caja** representan las medidas de tendencia central de una sola variable, que puede estar dividida en categorías o niveles de otra variable (figura \@ref(fig:boxp1)).

```{r boxp1, echo=F, fig.height=5, fig.width=5, fig.align='center', fig.cap="Ejemplo de gráfico de cajas para una variable con media y mediana de cero (línea negra del centro). Los límites de la caja central representan los cuartiles 2 y 3 (25 y 75%), y las líneas de rango los intervalos de confianza al 95%."}
set.seed(154)
x <- rnorm(100)
boxplot(x)
```

Para representar la distribución estadística de una variable, también existen los histogramas y gráficos de densidad. A diferencia de los gráficos de cajas, estos últimos muestran la candidad de observaciones que hay para cada valor de una variable (figura \@ref(fig:densidad)).

```{r densidad, echo=F, fig.height=8, fig.width=4, fig.align='center', fig.cap="Histograma y gráfico de densidad para la misma variable que en el gráfico de cajas."}
par(mfrow = c(2, 1))
hist(x, main = "Histograma de x", xlab = "", ylab = "Densidad de x")
plot(density(x), main = "Densidad de X", xlab = "x", ylab = "Densidad de x")
```

Un tipo de gráficos bi-variado (permite la visualización de dos variables), son los gráficos de dispersión. Se consiguen marcando los puntos en el plano euclidiano donde coinciden los dos conjuntos que se están graficando y sirven para visualizar tendencias y sus formas, es decir si lo valores de un conjunto aumentan o disminuyen cuando el otro conjunto aumenta de valor (figura \@ref(fig:disper))

```{r disper, echo=F, fig.height=4.5, fig.width=8, fig.cap="Gráfico de dispersión para la misma variable y otras dos con alta (izquierda) y baja correlación (derecha)."}
y.1 <- x + rnorm(100, 1.1, 0.25)
y.2 <- rnorm(100)

par(mfrow = c(1, 2))
plot(x, y.1)
plot(x, y.2)
```


# Tutorial

## R `graphics`

La función base de este paquete es `plot`, aunque está prácticamente limitada a la generación de gráficos de dispersión y de líneas. En análisis de datos, otras funciones prácticas son  `boxplot` para gráficos de caja e `hist` para histogramas. Para usar la función `plot` necesitamos dos argumentos como mínimo, las coordenadas $x$ y las $y$.

```{r plot1, echo=T, fig.height=4.5, fig.width=4.5, fig.align='center', fig.cap="Gráfico de dispersión generado con la función `plot`."}
x <- rnorm(100)
y <- x + rnorm(100, mean = 1, sd = 0.25)

plot(x, y)
```
En la Figura \@ref(fig:plot1) se muestra la simulación de dos variables $x$ con una distribución normal con $\mu = 0$ y $\sigma = 1$, y $y$ que está correlacionada con $x$ pero a la que se añade variación con una distribución normal con $\mu = 0$ y $\sigma = 0.25$. 

Por defecto la función `plot` graficará con puntos, pero esto se puede modificar especificando el *tipo* de gráfico que queremos, por ejemplo:

```{r plot2, echo = T, fig.align= "center", fig.cap = "Uso de `plot` para generar una gráfica con líneas. El argumento `type` puede tomar otros valores como `s`, por *steps*, en este caso `l` significa *lines*.", fig.width=4.5, fig.height=4.5}
x1 <- 1:10
y1 <- 1:10

plot(x1, y1, type = "l")
```

Si quisiéramos explorar la distribución estadística de los valores de ambas variables, podemos utilizar `boxplot` e `hist`:

```{r box, echo = T, fig.align='center', fig.cap="Uso de `boxplot` e `hist` para la variable $x$.", fig.width=4.5, fig.height=4.5}
boxplot(x)
hist(x)
```

La mayoría de las veces que hacemos análisis exploratorio tenemos las variables almacenadas en una base de datos. Además de acceder a los datos dentro de una base, normalmente estamos interesados en analizar la relación entre dos variables. Por lo tanto veamos cómo podemos acceder a los datos e incluir más de una variable de un `data.frame` con la función `boxplot` (incluidos los detalles de simulación):

```{r box2, echo=T, fig.align='center', fig.height=4.5, fig.width=4.5, fig.cap="Uso de `boxplot` con fórmula para representar la distribución de una variable numérica en relación a otra variable categórica con la sintaxis de fórmula."}
x2 <- rnorm(100, mean = 1, sd = 2)
x3 <- rnorm(100, mean = 1.3, sd = 1.5)
tratamiento <- rep(c("a", "b"), each = 100)

base <- data.frame(Variable = c(x2, x3),
                   Tratamiento = tratamiento)

boxplot(Variable ~ Tratamiento, data = base)
```

## `ggplot2`

El paquete `ggplot2` es uno de los más modernos y potentes de R para representar datos visualmente. Su sintaxis, sin embargo, es muy distinta de la que se usa en `graphics`. Todas las gráficas de `ggplot2` se generan llamando primero la función `ggplot`, y después se le van añadiendo los elementos gráficos como líneas, puntos, cajas o áreas. Para añadir cada uno de estos elementos gráficos  existen funciones geométricas como `geom_point` o `geom_line` para puntos y líneas respectivamente. El gráfico de la figura \@ref(fig:plot) puede ser replicado en `ggplot` de la siguiente manera:

```{r ggplot, echo = T, fig.align='center', fig.cap="Gráfico de dispersión con `ggplot2`.", fig.width = 4.5 , fig.height= 4.5}
library(ggplot2)

base.1 <- data.frame(x = x, y = y)

ggplot(base.1) + geom_point(aes(x = x, y = y))
```

Para un gráfico de cajas:

```{r ggbox, echo = T, fig.align='center', fig.width=4.5, fig.height=4.5}
ggplot(base) + geom_boxplot(aes(x = Tratamiento, y = Variable))
```
Una de las grandísimas ventajas de `ggplot2` es que se pueden utilizar colores para resaltar diferencias entre grupos de datos mucho más fácil que en `graphics`, simplemente añadiendo la variable que queremos utilizar para identificar los colores:

```{r ggboxcol, echo = T, fig.align='center', fig.width=4.5, fig.height=4.5}
ggplot(base) + geom_boxplot(aes(x = Tratamiento, y = Variable, fill = Tratamiento))
```

[Código fuente de este tutorial](Tutorial-graficos.Rmd)

[Regresar al índice del curso](index.html)