Search code examples
pythoncolorsmatplotlibplotcolor-scheme

How do I make bar plots automatically cycle across different colors?


In matplotlib, line plots color cycle automatically. These two line plots would have different colors.

axes.plot(x1, y)
axes.plot(x2, y)

However, bar plots don't. Both these data series will have blue bars.

axes.bar(x1, y)
axes.bar(x2, y)

How do I make bar plots cycle automatically across a predefined set of colors?


Solution


  • Optional: To get full control over the style of your figures use an existing mplstyle as a template: https://github.com/matplotlib/matplotlib/tree/master/lib/matplotlib/mpl-data/stylelib

    adjust the parameter : axes.prop_cycle: cycler('color', [....])

    load your style:

    from matplotlib import style
    style.use ('PATH TO YOUR MPL STYLE')
    

    You can cycle through your or the default style color cycle almost any way you want:

    #!/usr/bin/python 
    import matplotlib.pyplot as plt
    
    #data
    x=[1,2,4]
    y=[11,12,8]
    prop_iter = iter(plt.rcParams['axes.prop_cycle'])
    
    for i in range(0,len(x)):
      plt.bar(x[i],y[i],color=next(prop_iter)['color'])
    
    plt.show()
    

    plt.rcParams['axes.prop_cycle'] grabs all cycles so you need to select the correct cycler using the key ['color'].

    You can drop the iterator creation and use list comprehension and zip to create one liners:

    #!/usr/bin/python 
    import matplotlib.pyplot as plt
    
    x=[1,2,4]
    y=[11,12,8]
    prop = plt.rcParams['axes.prop_cycle']
    [plt.bar(param[0],param[1],color=param[2]['color']) for param in zip(x,y,prop)]
    plt.show()
    

    enter image description here