Как отобразить значение каждой переменной в баре с plot () с фреймом данных group_by? - PullRequest
1 голос
/ 26 марта 2020

Я сгенерировал гистограмму, где я сгруппировал 2 переменные в один столбец: -> как есть

  1. как я могу отобразить значение отдельных переменных в каждый бар?
  2. как я могу отобразить общее значение для каждого бара ??
import matplotlib.pyplot as plt
import pandas as pd

d = {'col1': ["Yes", "No", "Yes", "No","Yes", "No"], 'col2': ["Low", "Medium", "Medium", "High","High", "Medium"]}
df = pd.DataFrame(data=d)

df_grouped = df.groupby('col2')['col1'].value_counts(normalize=False).unstack()
df_grouped.plot(kind="bar", alpha=1, stacked='False', figsize=(14, 8))

Вместо этого, это будет моей целью: -> , чтобы -be

Я провел некоторые исследования, но не нашел ничего полезного для своих целей.

Большое спасибо

1 Ответ

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

Попробуйте:

import matplotlib.pyplot as plt
import pandas as pd

d = {'col1': ["Yes", "No", "Yes", "No","Yes", "No"], 'col2': ["Low", "Medium", "Medium", "High","High", "Medium"]}
df = pd.DataFrame(data=d)

df_grouped = df.groupby('col2')['col1'].value_counts(normalize=False).unstack()
df_grouped.fillna(0, inplace=True)

ax = df_grouped.plot(kind='bar',width=0.8,stacked=True,figsize=(14,9))
list_values = df_grouped.values.flatten()
gr_values = np.sum(df_grouped.values, axis=1)

list_values = df_grouped.values.flatten('F')
for i, (rect, value) in enumerate(zip(ax.patches, list_values)):
    if value != 0:
        h = rect.get_height() /2.
        w = rect.get_width() /2.
        x, y = rect.get_xy()
        ax.text(x+w, y+h,value,horizontalalignment='center',verticalalignment='center', weight='bold')
        ax.text(x+w,gr_values[i%len(gr_values)]*1.03,gr_values[i%len(gr_values)],horizontalalignment='center',verticalalignment='center',  weight='bold')

Вывод: enter image description here

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