Settting Различные цвета строки ошибок в bar plot в 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']) 

Есть ли лучший способ? Конечно, a.get_children()[8] вообще не является общим решением.

введите описание изображения здесь

2 Solutions collect form web for “Settting Различные цвета строки ошибок в bar plot в matplotlib”

Если вы просто хотите установить их в один цвет, используйте 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() 

введите описание изображения здесь

Это не общее решение, но вот оно.

 a = plt.gca() b = a.bar(range(4), [2]*4, yerr=range(4)) c = b.errorbar.lines[2][b.errorbar.has_xerr] # <---- c.set_color(['r', 'r', 'b', 'r']) # from matplotlib.collections import LineCollection # next(i # for i, x in enumerate(b.errorbar.lines) # if x and any(isinstance(y, LineCollection) for y in x)) == 2 
  • Как добавить заголовок в подзаголовки в Matplotlib?
  • Анимация 3D-поверхности из вычисленных матриц
  • Многочисленные бок о бок гистограммы с matplotlib?
  • Анимация вращающегося 3D-графика в matplotlib
  • python / matplotlib - многоцветная линия
  • matplotlib savefig размер изображения с bbox_inches = 'tight'
  • Тепловая карта в matplotlib с pcolor?
  • Диапазон изменения с масштабированием в матре
  • Python - лучший язык программирования в мире.