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)
```

No hay comentarios:

Publicar un comentario