lunes, 20 de julio de 2015

GGPLOT2. Gráfico de barras IV - Reordenar barras


---
title: "GGPLOT2. Gráfico de barras IV - Reordenar barras"
author: "Raúl Ortiz"
date: "Saturday, July 17, 2015"
output: pdf_document
---

```{r}
# Empezamos introduciendo nuestros datos y creando el DataFrame

Plantas = c(15,16,18,18,12,12,25,10,15,22,14,14,16,4,8,5,7,3,9,12) # Plantas nacidas por m2
Parcela = paste("P", 1:20)
Tratamiento = rep((c("Tratado","Testigo")),c(10,10))

df = data.frame(Tratamiento, Parcela, Plantas)
df
```

```{r}
# REPRESENTACIÓN SEGÚN EL ORDEN PREDEFINIDO EN R (alfabético).

# Representamos el número de plantas nacidas según el Tratamiento
ggplot(data=df, aes(x=Tratamiento, y=Plantas)) +
    geom_bar(stat="identity", position="stack")
# position=position.stack se puede abreviar con position="stack".

# Podemos representar cada una de las parcelas, pero agrupadas por el tratamiento.
ggplot(data=df, aes(x=Tratamiento, y=Plantas, fill=Parcela)) +
    geom_bar(stat="identity", position="dodge")
```

```{r}
# REPRESENTACIÓN SEGÚN ORDEN DEFINIDO POR EL USUARIO.

# Supongamos que queremos representar a la izquierda el tratado y a la derecha el testigo.
# Debemos tener en cuenta que, por defecto, el orden de representacion es el orden alfabético de los niveles de la variable representada. Para averiguar los niveles, usamos la funcion "levels".
levels(df$Tratamiento)
# Para cambiar este orden usamos la funcion "factor".
df$Tratamiento = factor(df$Tratamiento, levels=c("Tratado", "Testigo"))
levels(df$Tratamiento)
# Volvemos a ejecutar el la gráfica.
```

```{r}
# REPRESENTACION SEGÚN LA CANTIDAD REPRESENTADA (altura de las barras).

# Ahora representamos el número de plantas nacidas por parcela, distiguiendo las tratadas de las testigo, con el color de relleno.
ggplot(data=df, aes(x=Parcela, y=Plantas, fill=Tratamiento)) +
    geom_bar(stat="identity", position="dodge")
# Comprobamos que por defecto, se representan las parcelas según el orden alfabético.

# Podríamos también ordenar la representacion, para que aparecieran las parcelas con orden decreciente, según el número de plantas, pero distinguiendo con el relleno las de los distintos tratamientos.
ggplot(data=df, aes(x=reorder(Parcela,-Plantas), y=Plantas, fill=Tratamiento)) +
    geom_bar(stat="identity", position="dodge")

# O creciente
ggplot(data=df, aes(x=reorder(Parcela,Plantas), y=Plantas, fill=Tratamiento)) +
    geom_bar(stat="identity", position="dodge")
```

GGPLOT2. Gráfico de barras III - Posición de barras


---
title: "GGPLOT2. Gráfico de barras III - Position"
author: "Raúl Ortiz"
date: "Saturday, July 17, 2015"
output: pdf_document
---

```{r}
# Empezamos introduciendo nuestros datos y creando el DataFrame

Tratamiento = factor(c(1,2,1,2,1,2),labels=c("Testigo", "Tratado"))
Color = factor(c(1,1,2,2,3,3),labels=c("Verde","Envero","Negra"))
Aceitunas = c(72,33,11,8,17,59)

df=data.frame(Tratamiento,Color,Aceitunas)
df
```

```{r}
#install.packages("ggplot2") # Si es la primera vez que lo usas, tendrás que instalar primero el paquete.
library (ggplot2) # Después hay que cargarlo cada vez que inicies sesión.
```

```{r}
# Representamos el número de aceitunas que se han muestreado en cada tratamiento.

ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=c("darkgreen", "purple","black"))
# Este gráfico representa los porcentajes de aceitunas que de cada color, hay los distintos tratamientos en el momento de la recolección. Los porcentajes se encuentran "apilados" en cada columna, es decir, unos encima de otro.

# Hay otra manera de representar los mismos datos para que en vez de aplilados "position=stack()", queden posicionados unos junto a otros "position=position_dodge()".
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_dodge()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_stack()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

# Ademas de apilados o en columnas contiguas, hay otras formas de exponer los datos.

# position=position_identity() representa los valores solapados. Esta opción es mucho más interesante en gráficos del tipo histogramas.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_identity()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

# Se puede comprobar que están solapados si le damos cierto grado de transparencia al color de las barras, mediante  el comando "alpha".
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", alpha=0.3, position=position_identity()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

# position=position_jitter() Hace que las columnas están unas delantes de las otras, como en position=position_identity(), pero para que no queden totalmente solapadas modifica sus anchuras y el punto base, de manera que al menos se pueda ver un poco de cada barra.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_jitter()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

# Si preferimos que el punto base no se modifique, lo podemos especificar de la siguiente manera.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_jitter(height=0)) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

# position=position_jitterdodge()) Hace que las barras se pongan unas junto a otras, pero de manera irregular.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_jitterdodge()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))


# Supongamos que el número de aceitunas no suma 100
df$Aceitunas = c(96,30,18,10,20,108)

# Entonces la comparación con barra de datos apilados no sería tan eficaz.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_stack()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))

# Tenemos la opición de manipular los datos para averiguar los porcentajes y luego representarlos, o bien usar "position=position_fill()"
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity", position=position_fill()) +
    scale_fill_manual(values=c("darkgreen", "purple","black"))
```

jueves, 16 de julio de 2015

Paquete GGPLOT2. Gráfico de barras II - Fill, scale_fill_manual


# Empezamos introduciendo nuestros datos y creando el DataFrame

Tratamiento = factor(c(1,2,1,2,1,2),labels=c("Testigo", "Tratado"))
Color = factor(c(1,1,2,2,3,3),labels=c("Verde","Envero","Negra"))
Aceitunas = c(72,33,11,8,17,59)

df=data.frame(Tratamiento,Color,Aceitunas)
df
```

```{r}
#install.packages("ggplot2") # Si es la primera vez que lo usas, tendrás que instalar primero el paquete.
library (ggplot2) # Después hay que cargarlo cada vez que inicies sesión.
```

```{r}
# Representamos el número de aceitunas que se han muestreado en cada tratamiento.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas)) + geom_bar(stat="identity")
```

```{r}
# Podemos hacer que el relleno en las columnas varíe según el color de las aceitunas, recogido nuestra variable "Color", utilizando el comando "fill"
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity")
```

```{r}
# Podemos además modificar los colores, si preferimos usar otros para que la comprensión del gráfico sea mas intuitiva.
# El color se puede definir especificando bien el nombre en inglés (por ejemplo "black") o bien según el código hexadecimal (p.e.: "#FF0033")

# Ejemplo usando nombres.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=c("gree n4", "purple4","black"))

# Para saber todos los nombres disponibles, se puede ejecutar la siguiente función.
showCols <- function(cl=colors(), bg = "grey",
                     cex = 0.75, rot = 30) {
    m <- ceiling(sqrt(n <-length(cl)))
    length(cl) <- m*m; cm <- matrix(cl, m)
    require("grid")
    grid.newpage(); vp <- viewport(w = .92, h = .92)
    grid.rect(gp=gpar(fill=bg))
    grid.text(cm, x = col(cm)/m, y = rev(row(cm))/m, rot = rot,
              vp=vp, gp=gpar(cex = cex, col = cm))
  }
showCols(cl= colors(), bg="gray33", rot=30, cex=0.75)

```

```{r}
# Ejemplo usando código hexadecimal 
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=c("#006633", "#330066","#000000"))

# La correspondencia entre colores y códigos se puede consultar en la página  http://www.visibone.com
```

```{r}
# Se pueden utilizar paletas de colores RColorBrewer

install.packages("RColorBrewer")
library("RColorBrewer")
display.brewer.all()

# Si quieres ver una de las paletas con mas detalles, puedes hacerlo especificando su nombre y el número de franjas que quieres visializar (mínimo 3 y máximo variable)
display.brewer.pal(n = 4, name = 'Accent')

# En el código de la gráfica se incluiría de la siguiente manera.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=brewer.pal(n = 3, name = "Accent"))

# De manera uno poco mas abreviada.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_brewer(palette = "Accent")
```

```{r}
# Lo anterior se puede aplicar a la paleta Wes Anderson
install.packages("wesanderson")
library(wesanderson)

wes_palettes # Listado completo de paletas

wes_palette("Moonrise2")

ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values = wes_palette(n=3, name="Darjeeling2"))
```

```{r}
# También se pueden hacer escalas de colores a partir de las funciones
# rainbow(n), heat.colors(n), terrain.colors(n), topo.colors(n), and cm.colors(n)
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=topo.colors(3))
```

```{r}
# Si queremos una escala de grises.
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_grey()
```

```{r}
# Por último también se puede cambiár la luminiscencia "l" y la intensidad "c" y el tono de los colores "h".
ggplot(data=df, aes(x=Tratamiento, y=Aceitunas, fill=Color)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=rainbow(3)) +
    scale_fill_hue(l=50)
```

domingo, 12 de julio de 2015

Paquete GGPLOT2. Gráfico de barras I - Stat


Primer vídeo dedicado al paquete ggplot2.

# Empezamos introduciendo nuestros datos y creando el DataFrame

NHoja = seq(1:20)
NPulgones = c(39,31,34,28,33,22,26,27,20,23,25,20,9,19,12,16,11,12,17,10)
Tratamiento = rep((c("A","B","C")),c(5,7,8))

df=data.frame(NHoja,NPulgones,Tratamiento)
df
```

```{r}
install.packages("ggplot2") # Si es la primera vez que lo usas, tendrás que instalar primero el paquete.
library (ggplot2) # Después hay que cargarlo cada vez que inicies sesión.
```

```{r}
# Para crear un gráfico de barras se sigue la siguiente estructura
ggplot(data=df, aes(x=Tratamiento)) + geom_bar(stat="bin")
# Hay que especificar la fuente de los datos, en nuestro caso el DataFrame "df"
# Después las variables que representaremos en el gráfico.
# Después el tipo de gráfico (barras, caja y bigotes, violin, queso...)

# En el caso de gráfico de barras.
# Si sólo se especifica una variable, R la representa en el eje de abcisas (X) y en el eje de ordenadas (Y) representará el número de entradas o datos que tenga cada variable.
# La orden para que las cuente se especifica mediante   stat="bin", y es la opción por defecto.
ggplot(data=df, aes(x=Tratamiento)) + geom_bar()
```

```{r}
# Si queremos representar dos variables tendremos que usar   stat="identity".
ggplot(data=df, aes(x=Tratamiento, y=NPulgones)) + geom_bar(stat="identity")
# Si no lo hacemos R nos dará un mensaje de aviso.
ggplot(data=df, aes(x=Tratamiento, y=NPulgones)) + geom_bar()
```

```{r}
# Representamos el número de pulgones en cada muestra u hoja.
ggplot(data=df, aes(x=NHoja, y=NPulgones)) + geom_bar(stat="identity")

# En el eje de abcisas no aparecen representados todos los número de hojas. Esto sucede porque R ha visto que hemos creado un vector con números y por defecto le ha dado el caracter numérico a esa variable.
str(df)
is.numeric(df$NHoja)
class(df$NHoja)

# Cambiamos la clase a factor, porque en realidad los números representan los nombres de cada hoja y no vamos a hacer operaciones numéricas con ellos.
df$NHoja = as.factor(df$NHoja)

# Comprobamos
str(df)
is.numeric(df$NHoja)
class(df$NHoja)

# Volvemos a hacer la gráfica.
ggplot(data=df, aes(x=NHoja, y=NPulgones)) + geom_bar(stat="identity")
```

```{r}
# En la sección de aes, también podemos especificar si queremos que además queremos diferenciar el color de las barras, según los niveles de otra variable, por ejemplo, dar un color diferente según el tipo de tratamiento que han recibido. Para ello utilizaremos la expresión "fill=Tratamiento".
ggplot(data=df, aes(x=NHoja, y=NPulgones, fill=Tratamiento)) + geom_bar(stat="identity")

# Podemos especificar los colores de relleno con el comando "scale_fill_manual".
ggplot(data=df, aes(x=NHoja, y=NPulgones, fill=Tratamiento)) +
    geom_bar(stat="identity") +
    scale_fill_manual(values=c("#FF0033", "#3300FF","#00CC00"))

ggplot(data=df, aes(x=NHoja, y=NPulgones, fill=NHoja)) +
    geom_bar(stat="identity")
```