% File src/library/grDevices/man/palette.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2012 R Core Team
% Copyright 2002-2010 The R Foundation
% Distributed under GPL 2 or later

\name{adjustcolor}
\alias{adjustcolor}
\title{Adjust Colors in One or More Directions Conveniently.}
\description{
  Adjust or modify a vector of colors by \dQuote{turning knobs} on one or more
  coordinates in \eqn{(r,g,b,\alpha)} space, typically by up or down
  scaling them.
}

\usage{
adjustcolor(col, alpha.f = 1, red.f = 1, green.f = 1, blue.f = 1,
            offset = c(0, 0, 0, 0),
            transform = diag(c(red.f, green.f, blue.f, alpha.f)))}
\arguments{
  \item{col}{vector of colors, in any format that col2rgb() accepts}
  \item{alpha.f}{factor modifying the opacity alpha; typically in [0,1]}
  \item{red.f, green.f, blue.f}{factors modifying the \dQuote{red-},
    \dQuote{green-} or \dQuote{blue-}ness of the colors, respectively.}
  \item{offset}{
  }
  \item{transform}{
  }
}
\value{a color vector of the same length as \code{col}, effectively the
  result of \code{\link{rgb}()}.
}
%\author{Thomas Lumley, Luke Tierney, Martin Maechler, Duncan Murdoch...}
% \details{

% }
\seealso{
  \code{\link{rgb}}, \code{\link{col2rgb}}.  For more sophisticated
  color constructions: \code{\link{convertColor}}
}
\examples{
## Illustrative examples :
opal <- palette("default")
stopifnot(identical(adjustcolor(1:8,       0.75),
                    adjustcolor(palette(), 0.75)))
cbind(palette(), adjustcolor(1:8, 0.75))

##  alpha = 1/2 * previous alpha --> opaque colors
x <- palette(adjustcolor(palette(), 0.5))

sines <- outer(1:20, 1:4, function(x, y) sin(x / 20 * pi * y))
matplot(sines, type = "b", pch = 21:23, col = 2:5, bg = 2:5,
        main = "Using an 'opaque ('translucent') color palette")

x. <- adjustcolor(x, offset = c(0.5, 0.5, 0.5, 0), # <- "more white"
                  transform = diag(c(.7, .7, .7, 0.6)))
cbind(x, x.)
op <- par(bg = adjustcolor("goldenrod", offset = -rep(.4, 4)), xpd = NA)
plot(0:9, 0:9, type = "n", axes = FALSE, xlab = "", ylab = "",
     main = "adjustcolor() -> translucent")
text(1:8, labels = paste0(x,"++"), col = x., cex = 8)
par(op)

## and

(M <- cbind( rbind( matrix(1/3, 3, 3), 0), c(0, 0, 0, 1)))
adjustcolor(x, transform = M)

## revert to previous palette: active
palette(opal)
}
