Color cycles¶
ProPlot defines color cycles as color palettes comprising sets of distinct colors. Unlike colormaps, interpolation between these colors may not make sense. Color cycles are generally used with bar plots, line plots, and other distinct plot elements. ProPlot uses the ListedColormap
class to name color cycles, then applies them to plots by updating the property cycler. Color cycles can also be made by sampling colormaps (see Making new color cycles).
ProPlot adds several features to help you use color cycles effectively in your figures. This section documents the new registered color cycles, explains how to make and modify colormaps, and shows how to apply them to your plots.
Included color cycles¶
Use show_cycles
to generate a table of the color cycles registered by default and loaded from your ~/.proplot/cycles
folder. You can make your own color cycles using the Cycle
constructor function.
[1]:
import proplot as plot
f = plot.show_cycles()
/home/docs/checkouts/readthedocs.org/user_builds/proplot/conda/v0.5.0/lib/python3.7/site-packages/proplot/utils.py:105: ProPlotWarning: Rebuilding font cache.
Changing the color cycle¶
You can make and apply new property cyclers with the Cycle
constructor function. Various plotting commands like plot
and scatter
now accept a cycle
keyword arg, which is passed to Cycle
(see cycle_changer
). To save your color cycle data and use it every time ProPlot is imported, simply pass save=True
to Cycle
. If you want to change the global property cycler, pass a name to the rc.cycle
setting or pass the result of Cycle
to the rc[‘axes.prop_cycle’]
setting (see Configuring proplot).
[2]:
import proplot as plot
import numpy as np
lw = 5
state = np.random.RandomState(51423)
data = (state.rand(12, 12) - 0.45).cumsum(axis=0)
f, axs = plot.subplots(ncols=3, axwidth=1.7)
# Use the default cycle
ax = axs[0]
plot.rc.cycle = 'contrast'
ax.plot(data, lw=lw)
# Pass the cycle to a plotting command
ax = axs[1]
ax.plot(data, cycle='qual2', lw=lw)
ax = axs[2]
for i in range(data.shape[1]):
ax.plot(data[:, i], cycle='qual2', lw=lw)
axs.format(suptitle='Local and global color cycles demo')
Making new color cycles¶
You can make new color cycles with the Cycle
constructor. One great way to make cycles is by sampling arbitrary colormaps! Just pass a color name or colormap name to the Cycle
constructor, with the last positional argument indicating the number of samples you want to draw.
Positional arguments passed to Cycle
are interpreted by the Colormap
constructor, and the resulting colormap is sampled at discrete values. To exclude near-white colors on the end of a colormap, pass e.g. left=x
to Cycle
, or supply a plotting command with e.g. cycle_kw={'left':x}
. See Colormaps for details.
In the below example, several cycles are constructed from scratch, and the lines are referenced with colorbars and legends. For making colorbars from a list of lines, see Colorbars and legends.
[3]:
import proplot as plot
import numpy as np
f, axs = plot.subplots(ncols=2, share=0, axwidth=2, aspect=1.2)
state = np.random.RandomState(51423)
data = (20*state.rand(10, 21) - 10).cumsum(axis=0)
# Cycle from on-the-fly monochromatic colormap
ax = axs[0]
lines = ax.plot(data[:, :5], cycle='plum', cycle_kw={'left': 0.3}, lw=5)
f.colorbar(lines, loc='b', col=1, values=np.arange(0, len(lines)))
f.legend(lines, loc='b', col=1, labels=np.arange(0, len(lines)))
ax.format(title='Cycle from color')
# Cycle from registered colormaps
ax = axs[1]
cycle = plot.Cycle('blues', 'reds', 'oranges', 15, left=0.1)
lines = ax.plot(data[:, :15], cycle=cycle, lw=5)
f.colorbar(lines, loc='b', col=2, values=np.arange(0, len(lines)), locator=2)
f.legend(lines, loc='b', col=2, labels=np.arange(0, len(lines)), ncols=4)
ax.format(
title='Cycle from merged colormaps',
suptitle='Color cycles from colormaps demo'
)
Generic property cycles¶
Cycle
can also generate cyclers that change properties other than color. Below, a single-color dash style cycler is constructed and applied to the axes locally. To apply it globally, simply use plot.rc['axes.prop_cycle'] = cycle
.
[4]:
import proplot as plot
import numpy as np
import pandas as pd
f, ax = plot.subplots(axwidth=3, aspect=1.5)
state = np.random.RandomState(51423)
data = (state.rand(20, 4) - 0.5).cumsum(axis=0)
data = pd.DataFrame(data, columns=pd.Index(['a', 'b', 'c', 'd'], name='label'))
ax.format(suptitle='Plot without color cycle')
cycle = plot.Cycle(dashes=[(1, 0.5), (1, 1.5), (3, 0.5), (3, 1.5)])
obj = ax.plot(
data, lw=3, cycle=cycle, legend='ul',
legend_kw={'ncols': 2, 'handlelength': 3}
)
Downloading color cycles¶
There are plenty of online interactive tools for generating and testing color cycles, including i want hue, coolers, and viz palette.
To add color cycles downloaded from any of these sources, save the cycle data to a file in your ~/.proplot/cycles
folder, then call register_cycles
. The file should be named name.ext
, where name
will be the registered cycle name. See register_cmaps
for valid file extensions.