Get default line colour cycle

I noticed when you plot that the first line is blue, then green, then red, and so on.

Is there some way to access this list of colours? I've seen a million posts on how to change the colour cycle or access the iterator, but not on how to just get the list of colours that matplotlib cycles through by default.

In matplotlib versions >= 1.5, you can print the rcParam called axes.prop_cycle:

print plt.rcParams['axes.prop_cycle'].by_key()['color']

# [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']

Or equivalently, in python3:

print(plt.rcParams['axes.prop_cycle'].by_key()['color'])

In versions < 1.5, this was called color_cycle:

print plt.rcParams['axes.color_cycle']

# [u'b', u'g', u'r', u'c', u'm', u'y', u'k']

Note that the default color cycle changed in version 2.0.0 http://matplotlib.org/users/dflt_style_changes.html#colors-in-default-property-cycle

Changes to the default style — Matplotlib 3.1.2 documentation, rcParams['axes.prop_cycle'] colors = prop_cycle.by_key()['color'] lwbase = plt. rcParams['lines.linewidth'] thin = lwbase / 2 thick = lwbase * 3 fig,� Often, there is no need to get the default color cycle from anywhere, as it is the default one, so just using it is sufficient. import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) for i in range(4): line, = ax.plot(t,i*(t+1), linestyle = '-') ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':') plt.show()

Often, there is no need to get the default color cycle from anywhere, as it is the default one, so just using it is sufficient.

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)

for i in range(4):
    line, = ax.plot(t,i*(t+1), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':')

plt.show()

In case you want to use the default color cycle for something different, there are of course several options.

"tab10" colormap

First it should be mentionned that the "tab10" colormap comprises the colors from the default color cycle, you can get it via cmap = plt.get_cmap("tab10").

Equivalent to the above would hence be

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)
cmap = plt.get_cmap("tab10")
for i in range(4):
    ax.plot(t,i*(t+1),   color=cmap(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':')

plt.show()
Colors from color cycle

You can also use the color cycler directly, cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']. This gives list with the colors from the cycle, which you can use to iterate over.

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

for i in range(4):
    ax.plot(t,i*(t+1),   color=cycle[i], linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':')

plt.show()
The CN notation

Finally, the CN notation allows to get the Nth color of the color cycle, color="C{}".format(i). This however only works for the first 10 colors (N in [0,1,...9])

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)

for i in range(4):
    ax.plot(t,i*(t+1),   color="C{}".format(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':')

plt.show()

All codes presented here produce the same plot.

Colors in the default property cycle — Matplotlib 3.1.2 documentation, Display the colors from the default prop_cycle, which is obtained from the rc parameters. rcParams['lines.linewidth'] thin = lwbase / 2 thick = lwbase * 3 fig, axs� To get the colours in the default colour cycle you can simply use the strings 'C0', 'C1', 'C2' etc. So, in this case just. plt.fill_between(x_values, line2 - 5, line2 + 5, alpha=0.3, color='C1') The result looks far better now the colours match:

if you're looking for a quick one-liner to get the RGB colors that matplotlib uses for its lines, here it is:

>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(0.12156862745098039, 0.4666666666666667, 0.7058823529411765)
(1.0, 0.4980392156862745, 0.054901960784313725)
(0.17254901960784313, 0.6274509803921569, 0.17254901960784313)
(0.8392156862745098, 0.15294117647058825, 0.1568627450980392)
(0.5803921568627451, 0.403921568627451, 0.7411764705882353)
(0.5490196078431373, 0.33725490196078434, 0.29411764705882354)
(0.8901960784313725, 0.4666666666666667, 0.7607843137254902)
(0.4980392156862745, 0.4980392156862745, 0.4980392156862745)
(0.7372549019607844, 0.7411764705882353, 0.13333333333333333)
(0.09019607843137255, 0.7450980392156863, 0.8117647058823529)

Or for uint8:

import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(31, 119, 180)
(255, 127, 14)
(44, 160, 44)
(214, 39, 40)
(148, 103, 189)
(140, 86, 75)
(227, 119, 194)
(127, 127, 127)
(188, 189, 34)
(23, 190, 207)

Colors in the default property cycle — Matplotlib 3.3.1 documentation, Learn more about default color, figure. Then I "get" the colors of those lines. MATLAB cycles through the line styles only after using all colors defined by the� Colors in the default property cycle. ¶. Display the colors from the default prop_cycle, which is obtained from the rc parameters. import numpy as np import matplotlib.pyplot as plt prop_cycle = plt.rcParams['axes.prop_cycle'] colors = prop_cycle.by_key() ['color'] lwbase = plt.rcParams['lines.linewidth'] thin = lwbase / 2 thick = lwbase * 3 fig, axs = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True) for icol in range(2): if icol == 0: lwx, lwy = thin, lwbase else: lwx, lwy = lwbase

The CN notation revisited

I'd like to address a new development of Matplotlib. In a previous answer we read

Finally, the CN notation allows to get the Nth color of the color cycle, color="C{}".format(i). This however only works for the first 10 colors (N in [0,1,...9])

but

import numpy as np 
import matplotlib.pyplot as plt 

t = np.linspace(0,6.28, 629)                                                      
for N in (1, 2): 
    C0N, C1N = 'C%d'%(N), 'C%d'%(N+10) 
    plt.plot(t, N*np.sin(t), c=C0N, ls='-',  label='c='+C0N) 
    plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N) 
plt.legend() ; plt.grid() ; plt.show()                                           

gives

default figure color order - MATLAB Answers, Previously the first line was pure blue ( color='b' in matplotlib syntax), To get the colours in the default colour cycle you can simply use the� Ganesh Kumar N Replied on April 10, 2010 If you want to make a line color or width as default, after you draw the line right click on the line and select ‘set as default line’. Refer the link below on how to change the line color and width.

Easily specifying colours from the default colour cycle in matplotlib , When importing seaborn, the default color cycle is changed to a set of ten colors when you ask for a qualitative Color Brewer palette, you'll always get the discrete colors, This can be useful if you want to map lines or points sequentially,� ax = plt.axes() ax.set_color_cycle( [plt.cm.cool(i) for i in np.linspace(0, 1, n_lines)]) for shift in phase_shift: plt.plot(x, np.sin(x - shift), lw=3) I prefer this method because the loop definition is a bit simpler (i.e., no call to zip ).

Choosing color palettes — seaborn 0.10.1 documentation, Color cycles are generally used with bar plots, line plots, and other distinct the color cycles registered by default and loaded from your ~/.proplot/cycles folder. For example, plot eight lines in a loop using the default colors and line style. ax = axes; hold on for i = 0:7 plot([i i+2]) end hold off Replace the ColorOrder array with a new array that contains four colors (you can also replace this array using the colororder function).

Color cycles — ProPlot documentation, Mathematica 10 release appears to have changed the default styling of plots: the most visible changes are thicker lines and different default colors. Thus, answers � a "CN" color spec, i.e. 'C' followed by a number, which is an index into the default property cycle (matplotlib.rcParams['axes.prop_cycle']); the indexing is intended to occur at rendering time, and defaults to black if the cycle does not include color.

Comments
  • Thanks! Slight correction: The first one should be: lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]
  • @Peter, yes, or plt.rcParams['axes.prop_cycle'].by_key()['color']
  • is it possible to tell matplotlib to use some kind of cycle? Having to iterate over the colors array means you have to add the logic for going back to index 0 after using one full cycle.
  • @Mehdi Sure, matplotlib does use a color cycle. This question asks for getting the colors of this cycle.
  • I think CN notation should be much more prominent in your answer, I almost missed it. I suspect the vast majority of use cases is happy with being able to access only the first 10 colours, and passing 'C1' an friends is way less boilerplate than explicitly grabbing the prop cycle.