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)
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)
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()
).
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.
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()
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')
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)
From Three Colors
>>> cmap = ColorMap.from_three_colors(Color.red(), Color.green(), Color.blue())