Pandas DataFrame Bar Plot - столбцы графиков разных цветов из определенной цветовой карты
Как вы строите столбцы гистограммы разных цветов, используя только панду plot
метод?
Если у меня есть этот DataFrame:
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
index count
0 0 3372
1 1 68855
2 2 17948
3 3 708
4 4 9117
Какие df.plot()
аргументы, которые мне нужно установить, чтобы каждый бар на графике:
- Использует парную цветовую карту
- Графики каждого бара разного цвета
Что я пытаюсь:
df.plot(x='index', y='count', kind='bar', label='index', colormap='Paired', use_index=False)
Результат:
Что я уже знаю (да, это работает, но опять же, моя цель - выяснить, как это сделать с df.plot
ТОЛЬКО. Наверняка это должно быть возможно?)
def f(df):
groups = df.groupby('index')
for name,group in groups:
plt.bar(name, group['count'], label=name, align='center')
plt.legend()
plt.show()
1 ответ
Там нет аргумента вы можете передать df.plot
это окрашивает столбцы по-разному для одного столбца.
Поскольку столбцы для разных столбцов окрашены по-разному, можно переместить кадр данных перед построением графика,
ax = df.T.plot(kind='bar', label='index', colormap='Paired')
Это теперь будет рисовать данные как часть подгруппы. Поэтому необходимо внести некоторые изменения, чтобы правильно установить ограничения и xlabels.
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
ax = df.T.plot(kind='bar', label='index', colormap='Paired')
ax.set_xlim(0.5, 1.5)
ax.set_xticks([0.8,0.9,1,1.1,1.2])
ax.set_xticklabels(range(len(df)))
plt.show()
Хотя я думаю, что это решение соответствует критериям из вопроса, на самом деле нет ничего плохого в использовании plt.bar
, Один звонок plt.bar
достаточно
plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))
Полный код:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))
plt.show()
Вы можете раскрасить каждый столбец по своему усмотрению с помощью параметра color
.
Например (например, с 3-мя переменными):
df.plot.bar(color=['C0', 'C1', 'C2'])
Примечание: струны 'C0', 'C1', ...'
упомянутые выше - это встроенные ярлыки для цветовых маркеров в matplotlib. Они означают первый, второй, третий цвета по умолчанию в активной цветовой схеме и так далее. Фактически, это просто пример, вы можете использовать любой настраиваемый цвет, используя код RGB или любое другое цветовое соглашение, так же легко.
Вы даже можете выделить конкретный столбец, например, средний здесь:
df.plot.bar(color=['C0', 'C1', 'C0'])
Чтобы воспроизвести это в приведенном примере кода, можно использовать:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
ax = df.T.plot(kind='bar', label='index', color=['C0', 'C1', 'C2', 'C3', 'C4'])
ax.set_xlim(0.5, 1.5)
ax.set_xticks([0.8,0.9,1,1.1,1.2])
ax.set_xticklabels(range(len(df)))
plt.show()
Пример с разными цветами:
Пример с произвольным повторением цветов:
Ссылка для справки: Назначить цвета линий в пандах
Помимо / расширения работы @Jairo Alves вы также можете указать конкретный шестнадцатеричный код
df.plot(kind="bar",figsize=(20, 8),color=['#5cb85c','#5bc0de','#d9534f'])