R: уменьшение насыщенности цвета цветовой палитры
Я нахожусь в поиске функции, которая уменьшает насыщенность определенной цветовой палитры на определенную величину. Например. Представьте, что у меня есть палитра
library(colorRamps)
col.palette=colorRampPalette(rainbow(13),interpolate ="spline")(1000)
pie(rep(1,1000), col=col.palette,lty=0,labels=NA)
![enter image description here]()
Есть ли какая-нибудь функция, которая могла бы работать над этим цветным вектором col.palette
, и уменьшать насыщенность на определенную величину или позволять изменять яркость и контраст? (Я пытаюсь достичь радужной палитры с меньшим насыщением и более плавными переходами, чем стандартный)
EDIT: также открыла функцию muted
в пакете scales
, которая более или менее делает то, что я хочу:
http://www.inside-r.org/packages/cran/scales/docs/muted
а также rainbow_hcl
в пакете colorspace
, упомянутом Джошем О'Брайеном ниже, который был тем более приглушенным и равным интенсивности радуги, которую я искал:
http://www.inside-r.org/packages/cran/colorspace/docs/rainbow_hcl:
library(colorspace)
pie(rep(1,1000), col=rainbow_hcl(1000,c=100,l=60),lty=0,labels=NA)
![enter image description here]()
Ответы
Ответ 1
Здесь функция, которая будет обесцветить вектор входных цветов определенной пропорцией:
library(colorspace) ## hsv colorspace manipulations
library(RColorBrewer) ## For some example colors
## Function for desaturating colors by specified proportion
desat <- function(cols, sat=0.5) {
X <- diag(c(1, sat, 1)) %*% rgb2hsv(col2rgb(cols))
hsv(X[1,], X[2,], X[3,])
}
И вот пример того, как он выглядит в действии:
## Utility function for plotting color palettes,
## (from vignette("hcl-colors"))
pal <- function(col, border = "light gray", ...) {
n <- length(col)
plot(0, 0, type="n", xlim = c(0, 1), ylim = c(0, 1),
axes = FALSE, xlab = "", ylab = "", ...)
rect(0:(n-1)/n, 0, 1:n/n, 1, col = col, border = border)
}
## Some example colors
cc <- brewer.pal(9, 'Set1')
cc75 <- desat(cc, 0.75)
cc50 <- desat(cc, 0.50)
cc25 <- desat(cc, 0.25)
## Plot 'em
par(mfcol = c(4,1), mar = c(0,0,0,0))
pal(cc)
pal(cc75)
pal(cc50)
pal(cc25)
![enter image description here]()
Ответ 2
Это работает нормально:
col2 <- adjustcolor(col.palette,alpha.f=0.5)
pie(rep(1,1000), col=col2,lty=0,labels=NA)
adjustcolor
- это базовая функция R, которая позволяет вам регулировать цвета разными способами, но я нахожу кнопку alpha.f
самой полезной.
Ответ 3
Вот еще один подход. В rainbow()
вы можете использовать еще два параметра (например, s и v). s для насыщения. Если вы играете с этими двумя параметрами, вы сможете получить то, что хотите.
col.palette=colorRampPalette(rainbow(13, s = 1, v = 0.8),interpolate = "spline")(1000)
pie(rep(1,1000), col=col.palette,lty=0,labels=NA)
![enter image description here]()
col.palette=colorRampPalette(rainbow(13, s = 0.6, v = 1),interpolate = "spline")(1000)
pie(rep(1,1000), col=col.palette,lty=0,labels=NA)
![enter image description here]()