Ответ 1
Если вы просто хотите установить их в один цвет, используйте error_kw
kwarg (ожидается, что это аргумент ключевого слова, переданный на ax.errorbar
).
Кроме того, как вы знаете, вы можете передать последовательность facecolors непосредственно в 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()
Однако, если вы хотите, чтобы метки ошибок были разных цветов, вам придется либо нарисовать их по отдельности, либо изменить их впоследствии.
Если вы используете последний вариант, цвета capline фактически не могут быть изменены индивидуально (обратите внимание, что они также не изменены в примере @falsetru). Например:
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()
Объект caplines
в ответе выше представляет собой набор из двух Line2D
s: одна строка для всех верхних шапок и одна строка для всех нижних шапок. Там нет способа изменить цвета колпачков индивидуально (легко установить их все на один цвет), не удаляя этого исполнителя и создавая вместо него 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()