Styling with cycler

Demo of custom property-cycle settings to control colors and other style properties for multi-line plots.

Note

More complete documentation of the cycler API can be found here.

This example demonstrates two different APIs:

  1. Setting the rc parameter specifying the default property cycle. This affects all subsequent axes (but not axes already created).
  2. Setting the property cycle for a single pair of axes.
from cycler import cycler
import numpy as np
import matplotlib.pyplot as plt
Copy to clipboard

First we'll generate some sample data, in this case, four offset sine curves.

x = np.linspace(0, 2 * np.pi, 50)
offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
yy = np.transpose([np.sin(x + phi) for phi in offsets])
Copy to clipboard

Now yy has shape

print(yy.shape)
Copy to clipboard

Out:

(50, 4)
Copy to clipboard

So yy[:, i] will give you the i-th offset sine curve. Let's set the default prop_cycle using matplotlib.pyplot.rc(). We'll combine a color cycler and a linestyle cycler by adding (+) two cycler's together. See the bottom of this tutorial for more information about combining different cyclers.

default_cycler = (cycler(color=['r', 'g', 'b', 'y']) +
                  cycler(linestyle=['-', '--', ':', '-.']))

plt.rc('lines', linewidth=4)
plt.rc('axes', prop_cycle=default_cycler)
Copy to clipboard

Now we'll generate a figure with two axes, one on top of the other. On the first axis, we'll plot with the default cycler. On the second axis, we'll set the prop_cycle using matplotlib.axes.Axes.set_prop_cycle(), which will only set the prop_cycle for this matplotlib.axes.Axes instance. We'll use a second cycler that combines a color cycler and a linewidth cycler.

custom_cycler = (cycler(color=['c', 'm', 'y', 'k']) +
                 cycler(lw=[1, 2, 3, 4]))

fig, (ax0, ax1) = plt.subplots(nrows=2)
ax0.plot(yy)
ax0.set_title('Set default color cycle to rgby')
ax1.set_prop_cycle(custom_cycler)
ax1.plot(yy)
ax1.set_title('Set axes color cycle to cmyk')

# Add a bit more space between the two plots.
fig.subplots_adjust(hspace=0.3)
plt.show()
Copy to clipboard
Set default color cycle to rgby, Set axes color cycle to cmyk

Setting prop_cycle in the matplotlibrc file or style files

Remember, a custom cycler can be set in your matplotlibrc file or a style file (style.mplstyle) under axes.prop_cycle:

axes.prop_cycle : cycler(color='bgrcmyk')
Copy to clipboard

Cycling through multiple properties

You can add cyclers:

from cycler import cycler
cc = (cycler(color=list('rgb')) +
      cycler(linestyle=['-', '--', '-.']))
for d in cc:
    print(d)
Copy to clipboard

Results in:

{'color': 'r', 'linestyle': '-'}
{'color': 'g', 'linestyle': '--'}
{'color': 'b', 'linestyle': '-.'}
Copy to clipboard

You can multiply cyclers:

from cycler import cycler
cc = (cycler(color=list('rgb')) *
      cycler(linestyle=['-', '--', '-.']))
for d in cc:
    print(d)
Copy to clipboard

Results in:

{'color': 'r', 'linestyle': '-'}
{'color': 'r', 'linestyle': '--'}
{'color': 'r', 'linestyle': '-.'}
{'color': 'g', 'linestyle': '-'}
{'color': 'g', 'linestyle': '--'}
{'color': 'g', 'linestyle': '-.'}
{'color': 'b', 'linestyle': '-'}
{'color': 'b', 'linestyle': '--'}
{'color': 'b', 'linestyle': '-.'}
Copy to clipboard

Keywords: matplotlib code example, codex, python plot, pyplot Gallery generated by Sphinx-Gallery