Colors and Color Maps

In COMPAS colors are defined in RGB color space, with components in the range of 0-1.

The RGB Color Circle

The color class (compas.colors.Color) provides constructor methods for the primary, secondary, and tertiary colors of the RGB color wheel or color circle.

Primary

>>> Color.red()
Color(1.0, 0.0, 0.0, 1.0)
>>> Color.green()
Color(0.0, 1.0, 0.0, 1.0)
>>> Color.blue()
Color(0.0, 0.0, 1.0, 1.0)

Secondary

>>> Color.yellow()
Color(1.0, 1.0, 0.0, 1.0)
>>> Color.cyan()
Color(0.0, 1.0, 1.0, 1.0)
>>> Color.magenta()
Color(1.0, 0.0, 1.0, 1.0)

Tertiary

>>> Color.orange()
Color(1.0, 0.5, 0.0, 1.0)
>>> Color.lime()
Color(0.5, 1.0, 0.0, 1.0)
>>> Color.mint()
Color(0.0, 1.0, 0.5, 1.0)
>>> Color.azure()
Color(0.0, 0.5, 1.0, 1.0)
>>> Color.violet()
Color(0.5, 0.0, 1.0, 1.0)
>>> Color.pink()
Color(1.0, 0.0, 0.5, 1.0)
../_images/colors-1.png

Colors of the RGB color circle.

Lighter and Darker Colors

The color class (compas.colors.Color) provides methods to generate lighter and darker variations of a given color. The methods can be used to modify the colors in-place (compas.colors.Color.lighten() and compas.colors.Color.darken()), or to generate new colors (compas.colors.Color.lightened() and compas.colors.Color.darkened()).

>>> red = Color.red()
>>> red.lighten(50)
None
>>> red.darken(50)
None
>>> red
Color(1.0, 0.0, 0.0, 1.0)
>>> red = Color.red()
>>> red.lightened(50)
Color(1.0, 0.5, 0.5, 1.0)
>>> red.darkened(50)
Color(0.5, 0.0, 0.0, 1.0)
../_images/colors-2.png

Lighter and darker colors of the color wheel.

Saturation

Similar to generating lighter and darker colors, the color class provides methods for saturating or desaturating colors (compas.colors.Color.saturate() and compas.colors.Color.desaturate(), and compas.colors.Color.saturated() and compas.colors.Color.desaturated()).

../_images/colors-3.png

Lighter and darker colors of the color wheel.

Color Maps

Using compas.colors.ColorMap, color maps can be constructed from various color inputs.

Maps based on named scientific color palettes designed by Fabio Crameri (https://www.fabiocrameri.ch/colourmaps/) and some of the matplotlib color palettes are also available.

To quickly plot a color palette for visual inspection use plot method of the color map class compas.colors.ColorMap.plot(). For example, the “viridis” map from matplotlib.

../_images/colors-4.png

Examples

Using the following template we can compare various color maps.

>>> from compas.colors import Color, ColorMap
>>> from compas.geometry import Point, Bezier
>>> from compas_plotters.plotter import Plotter
>>> points = [Point(0, 0, 0), Point(3, 6, 0), Point(6, -6, 6), Point(9, 0, 0)]
>>> curve = Bezier(points)
>>> cmap = ...
>>> plotter = Plotter(figsize=(16, 9))
>>> n = 500
>>> for i, point in enumerate(curve.locus(n)):
...     color = cmap(i, 0, n - 1)
...     plotter.add(point, facecolor=color, edgecolor=color, edgewidth=0.5, size=10)
...
>>> plotter.zoom_extents()
>>> plotter.show()

From RGB

>>> cmap = ColorMap.from_rgb()
../_images/colors-5.png

From One Color

>>> cmap = ColorMap.from_color(Color.red())
>>> cmap = ColorMap.from_color(Color.red(), rangetype='light')
>>> cmap = ColorMap.from_color(Color.red(), rangetype='dark')
../_images/colors-6.png

From Two Colors

>>> cmap = ColorMap.from_two_colors(Color.from_hex('#0092D2'), Color.pink())
>>> cmap = ColorMap.from_two_colors(Color.from_hex('#0092D2'), Color.pink(), diverging=True)
../_images/colors-7.png

From Three Colors

>>> cmap = ColorMap.from_three_colors(Color.red(), Color.green(), Color.blue())
../_images/colors-8.png