Как создать столбчатую диаграмму с накоплением в matplotlib?

#python #pandas #matplotlib #graph #bar-chart

#python #панды #matplotlib #График #столбчатая диаграмма

Вопрос:

Вот некоторый код, с которым я работаю: (данные составлены)

 # create dataset
mydf = {'Person': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'],
        'Punctuality':  ['On Time', 'Late', 'On Time', 'Early', 'On Time', 'Early',
                     'Late', 'Early', 'Early', 'On Time', 'On Time', 'Late'],
        'Diverted': [1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]
       }
# note: in 'Diverted', 1 = True, 0 = False

mydf = pd.DataFrame (mydf, columns = ['Person', 'Punctuality', 'Diverted'], index = list(range(0,12)))
mydf
 
 # create freq table
mydf_p = (pd.DataFrame(mydf['Punctuality'].value_counts())).reset_index()
mydf_p.rename(columns={ mydf_p.columns[0]: "Punctuality", mydf_p.columns[1]: "Frequency" }, inplace = True)
mydf_p
 
 # create bar chart
plot = plt.subplots(nrows=1, ncols=1, figsize=(4, 5))
fig, (ax) = plot
x = mydf_p['Punctuality'].to_list()
y = mydf_p['Frequency'].to_list()

ax.bar(x, y, color='cornflowerblue')
ax.set_ylabel('Frequency')
ax.set_xlabel('Punctuality')
 

введите описание изображения здесь

Как я могу создать столбчатую диаграмму с накоплением, используя эти данные, где столбики пунктуальности разделяются пропорционально тому, перенаправляется путешествие людей или нет??

Я пытался следовать документации, но я все еще не совсем понимаю, как это сделать. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.plot.bar.html

Очень надеюсь, что кто-нибудь сможет помочь 🙂

Ответ №1:

Ваш вопрос не так ясен. Возможно, ожидаемый результат был бы полезен. Если я все правильно понял, пожалуйста, попробуйте groupby, unstack и plot.

 mydf.groupby(['Punctuality','Diverted']).Person.count().unstack().plot.bar(stacked=True)
 

введите описание изображения здесь