Random colors
library(grDevices)
library(viridis)
library(scales)
library(tidyr)
library(plyr)
library(dplyr)
library(RColorBrewer)
library(randtoolbox)
library(scales)
# one of my favorite paletets
show_col(colorRampPalette(viridis_pal()(77))(77))
# Take random colors from multiple palettes
get_random_colors <- function(X, Y, seed = NULL){
if (length(unique(X)) < 3){
stop("At least two palettes", call. = FALSE)
}
if (Y < 4){
stop("At least 4 colors", call. = FALSE)
}
N <- ceiling(Y/length(X))
cols <- function(cols, n, Y){
b <- colorRampPalette(rev(brewer.pal(9,cols)))(Y)
l1<-as.data.frame(t(rgb2hsv(col2rgb(b)))) %>%
mutate(S = rowSums(.)) %>%
mutate(N = rownames(.)) %>%
filter(v > 0.5, v < 0.95) %>%
select(N)
b <- sample(b[as.numeric(l1$N)], N)
}
l <- unique(unlist(lapply(X, cols, N, Y)))
if (is.null(seed)){
seed <- round(as.numeric(Sys.time()))
set.seed(seed)
cat(paste("Seed used:", seed))
}else{
set.seed(seed)
}
l1<-as.data.frame(t(rgb2hsv(col2rgb(l)))) %>%
mutate(S = rowSums(.)) %>%
mutate(N = rownames(.)) %>%
select(N)
l2 <- sample(l[as.numeric(l1$N)], Y)
return(l2)
}
# Random colors based on the HSV, colors are spaced by different numerical series
sobo_colors<-function(X, seed = NULL){
if (is.null(seed)){
seed <- sample(round(as.numeric(Sys.time())),1)
}
cat(paste("Seed used:", seed))
h<-sort(sobol(X,1,scrambling = 1, seed = seed))
l <- unlist(lapply(h, function(X) hsv(X, 0.5, 0.95)))
return(l)
}
halton_colors<-function(X){
h<-sort(halton(X,1, init = FALSE, usetime = TRUE))
l <- unlist(lapply(h, function(X) hsv(X, 0.5, 0.95)))
return(l)
}
golden_ratio_colors<-function(X, seed = NULL){
if (is.null(seed)){
seed <- sample(round(as.numeric(Sys.time())),1)
set.seed(seed)
}
cat(paste("Seed used:", seed))
h <- runif(1)
vals <- numeric(X)
vals[1]<-h
for (i in 2:X) {
vals[i] <- vals[i-1] + 0.618033988749895
}
vals <- sort(vals%%1)
l <- unlist(lapply(vals, function(X) hsv(X, 0.5, 0.95)))
return(l)
}
# brew.pal palettes
pals <- c("Blues", "Reds", "Greens", "Oranges", "Purples", "Greys")
pals <- c("BrBG", "PiYG", "PRGn", "PuOr", "RdBu", "RdGy", "RdYlBu", "RdYlGn", "Spectral")
show_col(get_random_colors(pals, 77), labels = FALSE)
show_col(sobo_colors(77), labels = F)
show_col(halton_colors(77), labels = F)
show_col(golden_ratio_colors(77), labels = F)