interp_scale | R Documentation |
Interpolate between colors to create a color scale, map values to colors along a scale, create a color palette, or get a few colors from a palette.
interp_scale(
colors = c("white", "black"),
model = "lab",
interp = "linear",
correct.lightness = FALSE,
domain = c(0, 1),
values = c(0, 1),
reverse = FALSE,
na.value = NULL,
exact.until = 64
)
interp_map(x, ...)
interp_palette(...)
interp_colors(n, ...)
scale_color_interp(
...,
colors = c("white", "black"),
model = "lab",
interp = "linear",
correct.lightness = FALSE,
reverse = FALSE,
values = NULL,
na.value = NULL,
extrapolate = FALSE,
exact.until = 100,
guide = "colorbar"
)
scale_fill_interp(
...,
colors = c("white", "black"),
model = "lab",
interp = "linear",
correct.lightness = correct.lightness,
reverse = FALSE,
values = NULL,
na.value = NULL,
exact.until = 100,
guide = "colorbar"
)
colors |
vector of colors specified as hex strings or named R colors. By default, those colors will be evenly distributed along the scale and new colors will be interpolated between them. |
model |
string defining the color model in which to perform the interpolation; valid models are |
interp |
string defining the type of interpolation to perform; either |
correct.lightness |
whether to correct lightness to come closer to a linear increase in lightness along the scale, which is preferable perpectually. This correction is particularly effective together with |
domain |
vector of two values between which the scale is computed. |
values |
if colors should not be evenly positioned along the gradient, this vector gives the position along the scale of each color in the |
reverse |
whether to reverse the order of colors along the scale. |
na.value |
value to return for missing values in the input. Can be either a color, |
exact.until |
integer, when more than |
x |
a vector whose values will be coerced to numbers and mapped to colors. |
... |
passed to |
n |
number of colors to extract from the color palette. |
extrapolate |
when |
guide |
type of guide for the legend ("colorbar" for a continuous colorbar, "legend" for a categorical guide) or guide object itself. |
*_scale
returns a function. This function takes a single argument (x
: a numeric vector), maps its values to colors, and returns thee colors as hex codes.
*_map
is a shortcut for *_scale(domain=range(x))(x)
: it creates a scale that spans the range of values in argument x
, maps the content of x
on that scale, and returns the colors.
*_palette
returns a function. This function takes an integer (n
) as argument, picks n
colors evenly spaced along the scale, and returns them as hex codes.
*_colors
is a shortcut for *_palette()(n)
and directly returns n
evenly spaced colors. It is equivalent to built-in functions such as heat.colors
, topo.colors
, etc.
scale_*
return a ggplot2 scale, either discrete (similar to scale_color_discrete
) or continuous (similar to scale_color_continuous
).
Other color scales and palettes:
brewer_scale()
,
chroma_scale()
,
cubehelix_scale()
,
etopo_scale()
,
hue_scale()
,
inferno_scale()
,
light_scale()
,
magma_scale()
,
plasma_scale()
,
turbo_scale()
,
viridis_scale()
,
vsup_scale()
,
wikitopo_scale()
# Define a color scale
coldhot <- interp_scale(c("#2B5DCD", "#EC2D38"))
# Apply it to some data
coldhot(c(0, 0.2, 0.6, 1))
# Define a palette
coldhot_pal <- interp_palette(c("#2B5DCD", "#EC2D38"))
# and get 10 colors from it
coldhot_pal(10)
show_col(coldhot_pal(10))
# Use the shortcut to define a palette and extract n colors from it
show_col(interp_colors(n=50, colors=c("#2B5DCD", "#EC2D38")))
# Test interpolation spaces and types
cols <- c("yellow", "blue", "red")
show_col(
interp_colors(10, cols, model="lab"),
interp_colors(10, cols, model="lab", interp="bez"),
interp_colors(10, cols, model="rgb"),
interp_colors(10, cols, model="hsv"),
interp_colors(10, cols, model="hcl")
)
# Change mapping region/direction
x <- 0:10
cols <- c("aliceblue", "cornflowerblue", "dodgerblue4")
show_col(
interp_scale(cols)(x),
interp_scale(cols, domain=range(x))(x),
interp_scale(cols, domain=range(x), reverse=TRUE)(x),
interp_scale(cols, values=c(0,1,10))(x)
)
# Plot Maunga Whau volcano with colors picked from a picture
# (likely incorrect perceptually but attempts a "realistic" look)
topo_colors <- c("#C4B99F", "#282A19", "#61781B", "#BC9352")
show_col(topo_colors)
image(maunga, col=interp_colors(100, colors=topo_colors))
# = the dark ring-like level is indeed misleading
persp(maunga, theta=50, phi=25, scale=FALSE, expand=2,
border=alpha("black", 0.4),
col=interp_map(persp_facets(maunga$z), colors=topo_colors))
## Not run:
library("rgl")
persp3d(maunga, aspect=c(1,0.7,0.2), axes=FALSE, box=FALSE,
col=interp_map(maunga$z, colors=topo_colors))
play3d(spin3d(axis=c(0, 0, 1), rpm=10), duration=6)
library("ggplot2")
p <- ggplot(maungaxyz) + coord_fixed() +
geom_raster(aes(x=x, y=y, fill=z)) +
geom_contour(aes(x=x, y=y, z=z), color="white", alpha=0.5)
p + scale_fill_interp(colors=topo_colors)
p + scale_fill_interp(colors=topo_colors, model="hsl")
p + scale_fill_interp(colors=topo_colors, reverse=TRUE)
p + scale_fill_interp(colors=topo_colors, interp="bezier")
## End(Not run)
# Map a third variable on a scatterplot
attach(airquality)
# define a scale encompassing the whole data
coldhot <- interp_scale(c("#2B5DCD", "#EC2D38"), domain=c(0,200))
# use it on a plot and in the legend
pars <- sidemargin()
plot(Wind, Temp, col=coldhot(Ozone), pch=19)
sidelegend(legend=c(pretty(Ozone), "NA"),
col=coldhot(c(pretty(Ozone), NA)), pch=19)
par(pars)
# note that the missing value color contrasts with the rest of the scale
## Not run:
# Or in ggplot
library("ggplot2")
ggplot(airquality) +
geom_point(aes(x=Wind, y=Temp, color=Ozone)) +
scale_color_interp(colors=c("#2B5DCD", "#EC2D38"))
# Which is very similar to
ggplot(airquality) +
geom_point(aes(x=Wind, y=Temp, color=Ozone)) +
scale_color_gradientn(colors=c("#2B5DCD", "#EC2D38"))
# but scale_color_interp provides more options regarding how colors are
# interpolated (and is a bit slower).
## End(Not run)
# Continuous, interpolated color scales are not really appropriate for
# categorical variables. This works
attach(iris)
plot(Petal.Length, Petal.Width, pch=21, bg=interp_map(Species))
legend(1, 2, legend=levels(Species),
pt.bg=interp_colors(n=nlevels(Species)), pch=21)
# but a hue-based scale would be much better (see ?hue_scale)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.