File: color_cycle.py

package info (click to toggle)
matplotlib 3.10.1%2Bdfsg1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 78,340 kB
  • sloc: python: 147,118; cpp: 62,988; objc: 1,679; ansic: 1,426; javascript: 786; makefile: 92; sh: 53
file content (129 lines) | stat: -rw-r--r-- 3,733 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
"""
.. redirect-from:: /tutorials/intermediate/color_cycle

.. _color_cycle:

===================
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 <https://matplotlib.org/cycler/>`_.

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 matplotlib.pyplot as plt
import numpy as np

# %%
# 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])

# %%
# Now ``yy`` has shape
print(yy.shape)

# %%
# So ``yy[:, i]`` will give you the ``i``-th offset sine curve. Let's set the
# default ``prop_cycle`` using :func:`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)

# %%
# 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 :func:`matplotlib.axes.Axes.set_prop_cycle`,
# which will only set the ``prop_cycle`` for this :mod:`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()

# %%
# Setting ``prop_cycle`` in the :file:`matplotlibrc` file or style files
# ----------------------------------------------------------------------
#
# Remember, a custom cycler can be set in your :file:`matplotlibrc`
# file or a style file (:file:`style.mplstyle`) under ``axes.prop_cycle``:
#
# .. code-block:: python
#
#    axes.prop_cycle : cycler(color='bgrcmyk')
#
# Cycling through multiple properties
# -----------------------------------
#
# You can add cyclers:
#
# .. code-block:: python
#
#    from cycler import cycler
#    cc = (cycler(color=list('rgb')) +
#          cycler(linestyle=['-', '--', '-.']))
#    for d in cc:
#        print(d)
#
# Results in:
#
# .. code-block:: python
#
#     {'color': 'r', 'linestyle': '-'}
#     {'color': 'g', 'linestyle': '--'}
#     {'color': 'b', 'linestyle': '-.'}
#
#
# You can multiply cyclers:
#
# .. code-block:: python
#
#     from cycler import cycler
#     cc = (cycler(color=list('rgb')) *
#           cycler(linestyle=['-', '--', '-.']))
#     for d in cc:
#         print(d)
#
# Results in:
#
# .. code-block:: python
#
#     {'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': '-.'}