python назначить разные цвета баров в барплоте - PullRequest
0 голосов
/ 27 марта 2020

Как назначить разные цвета индексам барха в pandas .DataFrame.plot? У меня есть датафрейм:

group      clicks_per_visit     bookings_per_visit     rev_per_visit
test1          0.90                0.039                   0.737
test2          0.87                0.034                   0.726

Я строю это, используя:

temp3.plot(kind='barh',subplots=True,grid=True,figsize=(10,7))

, чтобы получить этот график:

enter image description here

Я хочу, чтобы столбцы были разных цветов, чтобы выделить разные тестовые группы, и я также открыт для любых других идей или решений, чтобы сделать более «причудливую» визуализацию этих данных.

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Поведение pandas 'DataFrame.plot() может быть сложным и не всегда интуитивно понятным. Теоретически, вы можете передать массив цветов в plot(), который будет передан в основную функцию построения графика.

Фактически, поскольку вы строите 3 вспомогательных графика, вы должны передать список из 3 вспомогательных графиков. списки, каждый из которых содержит цвета каждого из ваших столбцов.

df.plot(kind='barh', subplots=True,grid=True,figsize=(10,7), color=[['C0','C1']]*3, legend=False)

Однако при этом метки на оси y исчезают. По какой-то причине вам нужно указать имена столбцов, которые вы хотите использовать при вызове plot(), чтобы снова появиться.

df.plot(kind='barh',x='group', y=['clicks_per_visit','bookings_per_visit','rev_per_visit'], subplots=True,grid=True,figsize=(10,7), color=[['C0','C1']]*3, legend=False)

enter image description here

Поскольку вы запрашиваете другие варианты визуализации, я могу показать вам, что вы можете получить примерно такой же вывод с более простым синтаксисом, используя seaborn. Единственный «улов» в том, что вы должны «сложить» свой фрейм данных, чтобы он был длинным, а не широким

df2 = df.melt(id_vars=['group'],value_vars=['clicks_per_visit', 'bookings_per_visit', 'rev_per_visit'])
plt.figure(figsize=(8,4))
sns.barplot(y='variable',x='value',hue='group', data=df2, orient='h')
plt.tight_layout()

enter image description here

0 голосов
/ 27 марта 2020

Вы можете сделать это, это очень ручной способ, но он будет работать:

axes = temp3.plot(kind='barh',subplots=True,grid=True,figsize=(10,7))

axes[0].get_children()[0].set_color('r')

Это назначит второй столбец с первой оси красным, затем вы можете выбрать другие, получив другая ось и дети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...