如何使条形图自动循环不同的颜色?

时间:2010-08-29 04:58:15

标签: python colors matplotlib plot color-scheme

matplotlib中,线条自动绘制颜色循环。这两个线图会有不同的颜色。

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

但是,条形图没有。这两个数据系列都有蓝条。

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

如何使条形图在预定义的一组颜色中自动循环?

3 个答案:

答案 0 :(得分:24)

这些方面的内容会为你做些什么吗?

#!/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()

更多关于colormaps

编辑:请参阅this example了解如何在预定义的一组颜色上循环。

答案 1 :(得分:4)

可选 要完全控制图形的样式,请使用现有的mplstyle作为模板: https://github.com/matplotlib/matplotlib/tree/master/lib/matplotlib/mpl-data/stylelib

调整参数:axes.prop_cycle:cycler(' color',[....])

加载你的风格:

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

您几乎可以按照自己想要的方式循环使用默认的样式颜色循环:

#!/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']抓取所有周期,因此您需要使用键[' color']选择正确的循环仪。

您可以删除迭代器创建并使用list comprehension和zip来创建一个衬垫:

#!/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

答案 2 :(得分:3)

来自http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.bar

的文档

条形图不会自动循环颜色,但您可以通过传递颜色属性直接设置颜色。 像这样:

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())

可以从预定义列表中选择颜色并循环显示。