Как создать оверлейный барный сюжет в пандах - PullRequest
0 голосов
/ 03 мая 2018

При обновлении некоторых из моих предыдущих кодов для использования pandas.DataFrame, я застрял со следующей проблемой ...

Это контрольный график, который создаст мой оригинальный код:

import pandas as pd
import matplotlib.pyplot as plt

a = range(1, 25)
b = a
c = [x+2 for x in b]
d = [x*2 for x in c]

plt.bar(a, d)
plt.bar(a, c)
plt.bar(a, b)
plt.show()

reference plot

Определение проблемы:

Я бы хотел создать этот же сюжет, используя встроенную функциональность pandas.DataFrame. Точнее, релевантно только размещение баров, меня не интересует форматирование / маркировка тиков оси.

df = pd.DataFrame({'a': a, 'b': b, 'c': c, 'd': d}, columns=['a', 'b', 'c', 'd'])
df.set_index('a', inplace=True)

df.plot.bar()
plt.show()

first pandas plot

Ни гистограмма панд по умолчанию (показанная выше), ни добавление опции stacked=True (см. Ниже) не дали желаемого результата.

df.plot.bar(stacked=True)
plt.show()

second pandas plot

К сожалению, опция overlay=True не существует.

Есть ли другой (желательно элегантный) способ добиться желаемого результата?

Если больше ничего не доступно, я просто изменю значения pandas.DataFrame (т.е. вычитаем столбцы друг из друга), а затем использую опцию stacked=True. Раньше я это реализовывал, жду ваших предложений ...

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете установить параметр ax со значением, возвращаемым subplots, например:

_, ax = plt.subplots()
df.d.plot(kind='bar', ax=ax, color='red')
df.c.plot(kind='bar', ax=ax, color='green')
df.b.plot(kind='bar', ax=ax, color='blue')

enter image description here

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