在matplotlib中的条形图中设置不同的错误栏颜色

col*_*ang 27 python matplotlib

在matplotlib Python中设置不同的颜色吧

我想更改错误栏颜色.经过多次尝试后,我找到了一条路:

a = plt.gca()
b = a.bar(range(4), [2]*4, yerr=range(4))
c = a.get_children()[8]
c.set_color(['r','r','b','r'])
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?当然a.get_children()[8]不是一般的解决方案.

在此输入图像描述

Joe*_*ton 54

如果您只想将它​​们设置为单一颜色,请使用error_kwkwarg(预期是传递给的关键字参数的字典ax.errorbar).

此外,您知道,您可以直接传递一系列bar面部颜色,但这不会更改错误栏颜色.

作为一个简单的例子:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.bar(range(4), [2] * 4, yerr=range(1, 5), alpha=0.5,
       color=['red', 'green', 'blue', 'cyan', 'magenta'],
       error_kw=dict(ecolor='gray', lw=2, capsize=5, capthick=2))
ax.margins(0.05)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,如果您希望错误栏是不同的颜色,您需要单独绘制它们或者之后修改它们.

如果你使用后一个选项,那么capline颜色实际上不能单独更改(注意它们在@fattru的例子中也没有改变).例如:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
colors = ['red', 'green', 'blue', 'cyan', 'magenta']

container = ax.bar(range(4), [2] * 4, yerr=range(1, 5), alpha=0.5, color=colors,
       error_kw=dict(lw=2, capsize=5, capthick=2))
ax.margins(0.05)

connector, caplines, (vertical_lines,) = container.errorbar.lines
vertical_lines.set_color(colors)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

caplines上面答案中的对象是两个Line2Ds 的元组:所有顶盖的一条线,所有底盖的一条线.单独更改大写字母的颜色(很容易将它们全部设置为相同的颜色),而无需删除该艺术家并LineCollection在其位置创建.

因此,在这种情况下,您最好只是单独绘制错误栏.

例如

import matplotlib.pyplot as plt

x, height, error = range(4), [2] * 4, range(1,5)
colors = ['red', 'green', 'blue', 'cyan', 'magenta']

fig, ax = plt.subplots()
ax.bar(x, height, alpha=0.5, color=colors)
ax.margins(0.05)

for pos, y, err, color in zip(x, height, error, colors):
    ax.errorbar(pos + 0.4, y, err, lw=2, capsize=5, capthick=2, color=color)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 非常非常有帮助,这个信息应该存在于官方教程中。 (2认同)