Revista Política

Construir una paleta de colores con R

Publicado el 18 octubre 2013 por Trinitro @trinitro

Uno de los problemas que tenemos los que trabajamos en diseño web o intentamos hacer infografias que mantengan una consistencia interna de colores, o queremos hacer presentaciones dignas de mención y que tengan cierta consistencia, pero que tenemos el sentido del gusto en colores de un gato de plastilina, es intentar conseguir una paleta de colores para nuestros proyectos.

Ya sea para construir una presentación de una gráfica de barras con colores consistentes entre ella, ya sea para utilizar los colores concordantes en una presentación.

Por ejemplo, quiero hacer una web cuyos menús y fondos oscilen entre el rojo (#FF0000) y el amarillo (#FFFF00), necesitaré una paleta de este estilo:

Rplot

Los colores de esta paleta podré seleccionar los que vea mejor para utilizarlos en cualquier programa de diseño gráfico y en los CSS de cualquier web, incluso puedo invocar una función de R que haga un gráfico y utilice esta paleta de colores personalizada.

Para conseguirla utilizo este script de R

Script paleta-degradado.R

###############################################
## Nombre: paleta-degradado.R
## color(RGB), color(RGB), Número -> Paleta
##
## Definición de variables:
##
## degradados es un número natural > 2
## color1 es un color en RGB 
## color2 es un color en RGB
## 
## Esta función construye una paleta de N colores 
## degradados entre los colores, que puede ser
## luego utilizada por otras funciones y plots
##
## Ejemplo de uso:
##
## source("paleta-degradado.R")
##
#################################################

library(grDevices)

################################################
## Defino aquí mis variables libres
################################################

color1 = "#FF0000"      ### El formato es RGB
color2 = "#FFFF00"
                        ## Puedo incluir más colores si quiero 
                        ## utilizarlos (ver nota más abajo)
degradados = 12         ## Ha de ser un número > 2

pal = colorRampPalette(c(color1, color2))

###############################################
## Nota para hacer paletas con 3 o más colores de base
##
## Se puede hacer una paleta con 3 o más colores
## Definimos: color3... colorN
## Re-definimos pal como
## pal = colorRampPalette(c(color1, color2,..., colorN))
#################################################

## Hago aparecer en la consola los colores que obtengo ##
print ("Paleta completa de colores")
print (pal(degradados))

## Dibujo un plot en blanco para incluir los degradados ##
plot(1:degradados,seq(1,10,length=degradados),type="n",xlab="",ylab="",main="Gráfica de degradados", axes=F)

## Hago aparecer los colores degradados de uno en uno en el plot ##
for (i in 1:degradados) rect(i-0.5,0,i+0.4999,11, col=pal(degradados)[i])

## Incluyo una leyenda para hacer aparecer en el plot
## los colores utilizados de forma comprensible
legend("topleft", legend=pal(i), fill=pal(i))

Otra forma de incluirlo es como función “degradado” que nos dará un output de una paleta de colores que pueda ser utilizada posteriormente, por ejemplo en un plot o en la creación de una nube de tags.

###############################################
## Nombre: degradado
## color(RGB), color(RGB), Número -> Paleta
##
## Definición de variables:
##
## degradados es un número natural > 2
## color1 es un color en RGB 
## color2 es un color en RGB
## 
## Esta función construye una paleta de N colores 
## degradados entre los colores, que puede ser
## luego utilizada por otras funciones y plots
##
## Ejemplo de uso:
##
# mipaleta = degradado ("#DD0000", "#FFFF00", 10)
##
#################################################
degradado = function (color1, color2, degradados)
{
library(grDevices)
palete = colorRampPalette(c(color1, color2))
palete (degradados)
}

Ejemplo de aplicación de la función de degradado a otras aplicaciones de R.

Aplicando este degradado al final de la función diseñada para extraer la nube de tags de un usuario de twitter añadiendo las siguientes líneas de código:

degradado = function (color1, color2, degradados)
{
library(grDevices)
palete = colorRampPalette(c(color1, color2))
palete (degradados)
}
mipaleta = degradado ("#DD0000", "#FFFF00", 10)

par(bg = "black") ## Establezco un fondo negro 
wordcloud(dm$word, dm$freq, random.order=FALSE, colors=mipaleta) ## construye la nube de tags

Consigo una presentación mucho más impactante de la nube de tags, francamente mucho mejor que la que se consigue con las paletas básicas.

trinitro-molon


Volver a la Portada de Logo Paperblog

Revistas