ryb2rgb.R

Las funciones rgb2rby.R y ryb2rgb.R “transforman” el modelo de color RGB a RYB y viceversa. Las paletas de color que resultan de dichas funciones son particularmente útiles para representar datos electorales en México, como se detalla en esta entrada del blog.

Ambas funciones están basadas en su totalidad en el código de Arah J. Leonard escrito en Python.

rgb2rby.R

# Convert a red-green-blue system to a red-yellow-blue system.
rgb2ryb <- function(x) {
r <- x[1]
g <- x[2]
b <- x[3]
# Remove the whiteness from the color.
w <- min(r, g, b)
r <- r - w
g <- g - w
b <- b - w
mg <- max(r, g, b)
# Get the yellow out of the red+green.
y <- min(r, g)
r <- r-y
g <- g-y
# If this unfortunate conversion combines blue and green, then cut each in half to preserve the value's maximum range.
if (b+g!=0){
b <- b/2
g <- g/2
}
# Redistribute the remaining green.
y <- y+g
b <- b+g
# Normalize to values.
my <- max(r, y, b)
if(my!=0){
n <- mg / my
r <- r*n
y <- y*n
b <- b*n
}
# Add the white back in.
r <- r+w
y <- y+w
b <- b+w
# And return back the ryb typed accordingly.
return(c(r,y,b))
}

ryb2rgb.R

# Convert a red-yellow-blue system to a red-green-blue system.
ryb2rgb <- function(x){
r <- x[1]
y <- x[2]
b <- x[3]
# Remove the whiteness from the color.
w <- min(r, y, b)
r <- r - w
y <- y - w
b <- b - w
my <- max(r, y, b)
# Get the green out of the yellow and blue
g <- min(y, b)
y <- y-g
b <- b-g
if(b+g!=0) {
b = b*2.0
g = g*2.0
}
# Redistribute the remaining yellow.
r <- r+y
g <- g+y
# Normalize to values.
mg <- max(r, g, b)
if(mg!=0) {
n <- my / mg
r <- r*n
g <- g*n
b <- b*n
}
# Add the white back in.
r <- r+w
g <- g+w
b <- b+w
# And return back the ryb typed accordingly.
return(c(r,g,b))
}

Leave a Reply