hclwizard()
shiny app, e.g., "R default schemes" are
now called "R legacy schemes" because base R color infrastructure was meanwhile
improved with hcl.colors()
(prompted by the colorspace
package) and
palette.colors()
. See
Zeileis & Murrell (2023, The R Journal).In the hclwizard()
shiny app the Python export now leverages the Python
colorspace package available from PyPI at https://pypi.org/project/colorspace/.
For more details see the Python package documentation at
https://retostauffer.github.io/python-colorspace/.
Improvement in desaturate()
: In addition to previous input color specifications
(hex strings, named colors, RGB matrices), formal S4 color objects are now
also supported. In this case, the desaturated colors are also returned as color
objects of the same class as the input. With this improvement, desaturate()
behaves exactly analogous to the color vision deficiency emulation functions
which had been improved in the same way in version 2.1-0 (see below).
Try harder to preserve the names in named color vectors when transformed with
lighten()
, darken()
, adjust_transparency()
, simulate_cvd()
, etc.
(suggested by Matias Andina).
Make the fixed color vision deficiency simulation in linear RGB coordinates
(introduced in version 2.1-0) the default in the cvd_emulator()
shiny app
as well.
Minor bug fixes in hclplot()
, the automatically generated figure titles
only use the H/L coordinates of the colors visualized. Minor fix on how
right
(index of colors on the right hand side of a diverging palette)
is calculated.
Support n = 1
color in diverging_hcl()
and divergingx_hcl()
which then
both return the neutral color in the center of the respective palette.
Bug fix for color vision deficiency simulations in simulate_cvd()
based
on the work of Machado et al. (2009):
Following some illustrations from the supplementary materials, the transformations
in previous versions of the package had been applied to gamma-corrected sRGB
coordinates directly. However, the Machado et al. paper implicitly relies
on a linear RGB space (see page 1294, column 1) where their linear matrix
transformations for simulating color vision deficiencies are applied.
Therefore, a new argument linear = TRUE
has been added to simulate_cvd()
(and hence in deutan()
, protan()
, and tritan()
) that first maps the
provided colors to linearized RGB coordinates, applies the color vision
deficiency transformation, and then maps back to gamma-corrected sRGB
coordinates. Optionally, linear = FALSE
can be used to restore the behavior
from previous versions where the transformations are applied directly to
the sRGB coordinates. For most colors the difference between the two
strategies is negligible but for some highly-saturated colors it becomes
more noticable, e.g., for red, purple, or orange. Thanks to Matthew Petroff
for reporting this issue and to Kenneth Knoblauch for advice and guidance.
Improvement in simulate_cvd()
(and hence in deutan()
, protan()
, and
tritan()
): When colors are specified as hex strings or named colors, the
sRGB coordinates after transformation are rounded appropriately to integers
in 0-255. Previous versions implicitly took the floor rather than round of
the coordinates.
Support formal S4 color objects in simulate_cvd()
(and hence in deutan()
,
protan()
, and tritan()
). In that case colors are transformed internally
to sRGB coordinates, color vision deficiency is simulated, and then a formal
S4 color object (of the same class as the input) is returned. This has the
advantage that no rounding is applied as when going through hex color strings.
Similarly, for an RGB matrix input, the output is also not rounded anymore.
Bug fix in scale_colour_discrete_qualitative()
(and analogously for sequential,
diverging, and divergingx) to make sure that the scale functions can also
be called within a function whose arguments are controlled by an outer
function (reported by Marcelo S. Perlin).
Added the accessible perceptual contrast algorithm (APCA) that is under
development for the next major revision of the WCAG as an alternative
algorithm
in contrast_ratio()
. See https://github.com/Myndex/SAPC-APCA.
Fixed a bug in lighten()
and darken()
for the case when some colors
were named (e.g., "blue"
) rather than hex strings only. In that case
linear RGB rather than sRGB was incorrectly used internally (reported by
Colin Goodall).
contrast_ratio()
for computing and visualizing contrast ratios
of pairs of colors as defined in the Web Content Accessibility Guidelines (WCAG)
(https://www.w3.org/TR/WCAG21/) of the World Wide Web Consortium (W3C).Added two new palettes from the viridis family (viridis/viridisLite),
namely "Rocket"
and "Mako"
in sequential_hcl()
.
Assure that all do.call()
for the ggplot2
scale functions are made with
envir = parent.frame()
in order to avoid problems with non-standard
evaluation, as reported in:
https://stackoverflow.com/questions/66049336/paste-name-in-scale-fill-color-in-colorspace-does-not-work-in-a-loop
New function extract_transparency()
for extracting alpha transparency
from color specifications, either as numeric, integer, character or hexmode vectors.
This accompanies the previously available function adjust_transparency()
allowing for more flexible modifications of alpha transparencies in colors.
Release of version 2.0-0 accompanying the publication of the paper "colorspace: A Toolbox for Manipulating and Assessing Colors and Palettes" in the Journal of Statistcal Software at https://doi.org/10.18637/jss.v096.i01. The paper is a compact version of the package web page (https://colorspace.R-Forge.R-project.org/) including some more discussion of related methods and software along with some more references to the scientific literature.
New function adjust_transparency()
that adjusts the alpha transparency
of some color specification and returns a hexadecimal string where
the alpha component is modified, added, or removed.
Added three more palettes from Fabio Crameri's scientific color maps
(scico), namely "Hawaii"
and "Batlow"
in sequential_hcl()
and
"Roma"
in divergingx_hcl()
.
Additional option cvd
in swatchplot()
so that color vision deficiency
emulation can be included on the fly.
Added binned ggplot2 color scales (in addition to discrete and continuous).
Changed the default colors in specplot()
from rainbow_hcl(3)
to
qualitative_hcl(3)
which is darker and has more chroma. Also, the order
of the legend has been reversed (Luminance / Chroma / Hue) so that the
legend labels are closer to the axis that they pertain to.
Improve the documentation of the LUV()
and LAB()
color spaces,
pointing out that the U
/V
and A
/B
coordinates are typically
in [-100, 100] but can actually be exceeded by highly saturated colors.
Bug fix in diverging_hcl()
and divergingx_hcl()
where the central color
of the diverging palette could sometimes collapse to transparent white
due to numerical inaccuracies on 32-bit platforms.
Improve the documentation of the HSV()
and HLS()
color spaces.
These do NOT necessarily correspond to sRGB; we can convert from
these to any RGB space that we choose (linear or non-linear,
any whitepoint). In particular, if we want to convert from one of
these color spaces to XYZ or beyond, we must first convert to a
specific RGB color space.
New article/vignette "Somewhere over the Rainbow" with published examples of RGB rainbow palettes (or similar highly saturated and non-monotonic palettes).
Bug fix in divergingx_hcl(n)
with even n
where the two central colors
were erroneously duplicated. Also, partial matching of palette names has
been fixed.
New sequential multi-hue palette: Purple-Yellow. This is a slightly improved version (i.e., with higher luminance contrast) of the palette used in Figure 4 of Stauffer et al. (2015, BAMS).
New flexible diverging palette Zissou 1 in divergingx_hcl()
. This closely
matches the palette of the same name in wesanderson. Note that this is
rather unbalanced, has relatively low luminance contrasts and uses very
high chroma throughout.
New palette Cividis in divergingx_hcl()
approximating the palette of
the same name from the viridis family. While luminance increases monotonically
from dark to light in the palette (thus indicating a sequential and not
a diverging palette), the hue and chroma trajectories resemble a
diverging pattern. Therefore, the flexibility of divergingx_hcl()
is
needed and the palette could not be approximated by sequential_hcl()
.
Limits of hue axis are improved in specplot()
. Previously, the hues
were always matched to [0, 100] on the chroma/luminance axis. Now they
are matched to [0, maximum chroma].
Major update of the package that enhances many of its capabilities, e.g., more refined palettes, named palettes, ggplot2 color scales, visualizations for assessing palettes, more and enhanced shiny and Tcl/Tk apps, color vision deficiency emulation, and much more. See below for further details. A new web site presenting and documenting the package has been launched at https://colorspace.R-Forge.R-project.org/
Claus O. Wilke and Claire D. McWhite joined the colorspace team, adding and enhancing various features, including (but not limited to) especially the color vision deficiency emulation, the ggplot2 palettes, and new shiny apps.
New function simulate_cvd()
for simulating color vision deficiencies
with convenience interfaces deutan()
, protan()
, and tritan()
.
New function hcl_palettes()
to query pre-defined HCL-based palettes:
qualitative, sequential (single-hue), sequential (multi-hue),
diverging. The corresponding print()
, plot()
, and summary()
methods
can help to explore the palettes.
Pre-defined HCL palettes are taken from previous publications about colorspace as well as approximations from other packages (ColorBrewer.org, CARTO, viridis, scico).
Users can also register their own custom color palettes for subsequent
usage (within the same session) in qualitative_hcl()
, sequential_hcl()
,
and diverging_hcl()
using the register = "..."
argument. To generally
make such custom palettes available, a registration R code a la
colorspace::qualitative_hcl(..., register = "myname")
can be placed in
the .Rprofile
or similar startup scripts. Also the choose_color()
/hclwizard()
app allows to register palettes in the current session.
New and more flexible qualitative_hcl()
palette function. This is
similar to the old rainbow_hcl()
but allows to use the pre-defined
palettes and change the parameters more easily.
Palette function sequential_hcl()
is now substantially more flexible:
encompasses both single-hue and multi-hue palettes; gained a new
parameter cmax
for non-monotonic chroma paths. Parameters h1
, h2
,
c1
, c2
, l1
, l2
, p1
, p2
, cmax
allow to easily modify
existing palettes in just a few HCL parameters.
Function diverging_hcl()
is introduced as a copy of diverge_hcl()
for a more consistent naming of the *_hcl palettes where * is one of
the adjectives "qualitative", "sequential", and "diverging". Both
diverging_hcl()
and diverge_hcl()
now also gained a cmax
argument
just like sequential_hcl()
. Individual parameters h1
, h2
, c1
,
l1
, l2
, p1
, p2
can also be easily modified.
New functions divergingx_hcl()
/divergex_hcl()
have been added for
fully fle_x_ible diverging palettes (as opposed to the more restricted
balanced palettes in diverging_hcl()
/diverge_hcl()
). These support parameters
h1
, h2
, h3
, c1
, c2
, c3
, l1
, l2
, l3
, p1
, p2
, p3
,
p4
, cmax1
, cmax2
.
Many new predefined palettes that facilitate close approximation of almost all palettes from ColorBrewer.org/RColorBrewer, CARTO/rcartocolor, and viridis. Additionally, approximations to a few of Fabio Crameri's scientific color maps (scico) are available as well.
New interactive shiny app hcl_color_picker()
- or equivalently,
choose_color()
- for exploring HCL colors, and manually assembling
individual colors or palettes. Douglas C. Wu (@wckdouglas) provided the
original implementation for the color palette feature.
New functions lighten()
and darken()
for programatically lightening
and darkening colors.
New convenience function swatchplot()
that facilitates displaying
color swatches to display and compare collections of color palettes.
specplot()
gained an argument y=NULL
to optionally display a second
palette and compare their trajectories. By default, specplot()
now
only shows the HCL spectrum but not the RGB spectrum (rgb = FALSE
)
because it is mainly used for illustrating and comparing properties
of HCL-based palettes.
New function hclplot()
for visualizing trajectories of color palettes
in two-dimensional HCL space projections.
New function demoplot()
that makes the demonstration plots (map,
heatmap, pie, lines, etc.) from the choose_palette()
/hclwizard()
app available outside the GUI on the command line.
Added a new function max_chroma()
that (approximately) computes
the maximum chroma possible for a given hue and luminance
combination in HCL space.
Registration of C routines.
In LAB_to_XYZ
conversion, replace decimal approximations with exact
rational numbers (reported by Glenn Davis). Follows Bruce Lindbloom:
http://brucelindbloom.com/index.html?LContinuity.html
New function whitepoint()
that can both query the current whitepoint
and set it to a different value. By default CIE D65 with XYZ
coordinates 95.047, 100.000, 108.883 is used. But it is possible
to set another global whitepoint now, used for all conversions in
the package (suggested by Glenn Davis).
Fixed a bug in desaturate()
for named colors (such as "gray92"
)
where erroneously the RGB()
rather than sRGB()
model was used
internally.
Added argument desaturate(..., amount = 1)
for optional partial
desaturation.
as_HLS()
, which was passing ans
rather than
color
as the colour to convert (and that was producing not only
wrong results, but random results because the values in ans
were
not initialized). Thanks to Thomas Julou for the report.return
rather than return()
in
choose_palette()
/hclwizard()
.In addition to the Tcl/Tk-based GUI for choose_palette()
there is now
a shiny-based GUI. choose_palette()
by default still uses the Tcl/Tk
version while hclwizard()
is a new wrapper that by default calls the
new shiny version.
New function specplot()
that converts a given palette in hex codes
to RGB and HCL coordinates and visualizes their spectrum as a line
plot.
hex2RGB()
now omits the alpha channel (if any) in the hex colors
provided.
Extended choose_palette()
for sequential palettes with multiple hues:
Now two palettes are included in the examples that are very close
to "viridis" and "magma" from matplotlib in Python (also available
in R via package viridis)
Changed Depends/Imports/Suggests to conform with current R CMD check.
choose_palette()
when using palette functions with
optional alpha channels.Alpha channel is preserved in desaturate for named colors (especially
"transparent"
and NA
). (Reported by Simon Potter.)
Added alpha argument for all palette functions (see ?rainbow_hcl
).
Small fixups for R CMD check.
hex()
and hex2RGB()
now. (Reported
by Richard Cotton.)choose_palette()
.New Tcl/Tk-based GUI for choosing different types of palettes:
qualitative (rainbow_hcl
), single-hue sequential (sequential_hcl
),
multi-hue sequential (heat_hcl
), and diverging (diverge_hcl
). The
GUI provides a wide collection of pre-stored palettes, easy
manipulation of the corresponding arguments, illustration through
a broad range of plot types (maps, heatmaps, variations of bar plots,
scatter plots, and many more), emulation of desaturation and
dichromatic vision, loading/saving palettes, etc.
Bug fix in polarLAB_to_LAB
conversion.
All .Call()
calls now with PACKAGE = "colorspace"
.
Added some simple tests based on the examples and vignette.
Added desaturate()
function for removal of chroma in a given
vector of colors.
Bug fix in HLS_to_RGB
conversion for s == 0
.
Added sRGB
colorspace.
(Existing RGB
colorspace is linearized "sRGB".)
Conversions to and from HSV
and HSL
can only occur
from or to RGB
or sRGB
(because both HSV
and HSL
are relative colorspaces, meaning relative to a particular
RGB colorspace).
(Converting to or from RGB
gives a different result
compared to conversion to or from sRGB
.)
All gamma
parameters in all R-level functions have been deprecated.
(The sRGB
colorspace has implicit gamma.)
citation("colorspace")
Moved color palettes from vcd to colorspace, including
vignette("hcl-colors")
Added infrastructure for HLS color space
New CITATION file