How do I make bar plots automatically cycle across different colors?
In matplotlib
, line plots color cycle automatically. These two line plots 开发者_Python百科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?
Would something along these lines do it for you?
#!/usr/bin/python
from matplotlib import cm
import matplotlib.pyplot as plt
#data
x=[1,2,4]
y=[11,12,8]
for i in range(0,len(x)):
plt.bar(x[i],y[i],color=cm.jet(1.*i/len(x)))
plt.show()
More on colormaps.
EDIT: See this example for how to cycle over a predefined set of colors.
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
From the documentation at http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.bar
The bar plots do not cycle color automatically but you could set the color directly by passing the color properties. Something like this:
colors = ['red', 'blue', 'green']
i = -1
def getCycledColor():
global i, colors
if i < len(colors) -1
i = i + 1
return colors[i]
else:
i = -1
axes.bar(x1,y,facecolor=getCycledColor())
axes.bar(x2,y,facecolor=getCycledColor())
The colors can be chosen from a predefined list and cycled.
精彩评论