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() аргументы, которые мне нужно установить, чтобы каждый бар на графике:

  1. Использует парную цветовую карту
  2. Графики каждого бара разного цвета

Что я пытаюсь:

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'])

Другие вопросы по тегам