如何让柱状图自动循环不同颜色?

16 投票
3 回答
19618 浏览
提问于 2025-04-16 03:26

matplotlib 这个库里,画线图的时候,颜色会自动循环变化。所以这两条线图的颜色会不一样。

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

但是,画柱状图的时候就不是这样了。这两组数据的柱子都是蓝色的。

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

我该怎么做才能让柱状图的颜色也能自动在预设的颜色中循环变化呢?

3 个回答

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

颜色可以从一个预定义的列表中选择,并且可以循环使用。

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

关于 颜色映射 的更多信息。

编辑:查看 这个例子,了解如何循环使用一组预定义的颜色。

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'] 来选择正确的循环器。

你可以省略创建迭代器的步骤,使用列表推导和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()

在这里输入图片描述

撰写回答