Создать гистограмму, сгруппированную по строковому ярлыку с пандами - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь создать гистограмму, где ось x равна type, а ось y равна price.Я хочу сгруппировать бары по каждому конкретному параметру type, чтобы я мог отображать бары с общим значением

type        price
cookie        1
cookie        3
brownie       2
candy         4
brownie       4

Это то, что я придумал до сих пор, но, похоже, строит много разных графиков

ax2 = df_new.groupby([df_new.type]).plot(kind='bar', figsize=(18,7),
                                        color="green", fontsize=13,);
ax2.set_title("Totals", fontsize=18)
ax2.set_ylabel("price", fontsize=18);
ax2.set_xticklabels(df_new['type'])

totals = []

for i in ax2.patches:
    totals.append(i.get_height())
total = sum(totals)

# set individual bar lables using above list
for i in ax2.patches:
    # get_x pulls left or right; get_height pushes up or down
    ax2.text(i.get_x()-.03, i.get_height()+.5, \
            str(round((i.get_height()/total)*100, 2))+'%', fontsize=15,
                color='black')

1 Ответ

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

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

data = '''type price
cookie 1
cookie 3
brownie 2
candy 4
brownie 4'''

cols, *data = [i.split(' ') for i in data.splitlines()]

import pandas as pd
df = pd.DataFrame(data, columns=cols)
df.price = df.price.astype(int)

ax2 = df.groupby('type').sum().plot.bar()
ax2.set_title("Totals", fontsize=18)
ax2.set_ylabel("price", fontsize=18);

which yields

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