Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas - Plotting a stacked Bar Chart

I am trying to create a stacked bar graph with pandas that replicates the picture, all my data is separate from that excel spreadsheet.

enter image description here

I can't figure out how to make a dataframe for it like pictured, nor can I figure out how to make the stacked bar chart. All examples I locate work in different ways to what I'm trying to create.

My dataframe is a csv of all values narrowed down to the following with a pandas dataframe.

      Site Name    Abuse/NFF
0    NORTH ACTON       ABUSE
1    WASHINGTON         -
2    WASHINGTON        NFF
3    BELFAST            -
4    CROYDON            - 

I have managed to count the data with totals and get individual counts for each site, I just cant seem to combine it in a way to graph.

Would really appreciate some strong guidance.

Completed code, many thanks for the assistance completing.

test5 = faultdf.groupby(['Site Name', 'Abuse/NFF'])['Site Name'].count().unstack('Abuse/NFF').fillna(0)

test5.plot(kind='bar', stacked=True)
like image 681
Kuzen Avatar asked May 01 '14 19:05

Kuzen


4 Answers

Are you getting errors, or just not sure where to start?

%pylab inline
import pandas as pd
import matplotlib.pyplot as plt

df2 = df.groupby(['Name', 'Abuse/NFF'])['Name'].count().unstack('Abuse/NFF').fillna(0)
df2[['abuse','nff']].plot(kind='bar', stacked=True)

stacked bar plot

like image 85
chucklukowski Avatar answered Nov 01 '22 00:11

chucklukowski


That should help

df.groupby(['NFF', 'ABUSE']).size().unstack().plot(kind='bar', stacked=True)
like image 20
Kyofa Avatar answered Oct 31 '22 23:10

Kyofa


Maybe you can use pandas crosstab function

test5 = pd.crosstab(index=faultdf['Site Name'], columns=faultdf['Abuse/NFF'])

test5.plot(kind='bar', stacked=True)
like image 4
Rafael Jose Gonzlez de Gouveia Avatar answered Nov 01 '22 01:11

Rafael Jose Gonzlez de Gouveia


If you want to change the size of plot the use arg figsize

df.groupby(['NFF', 'ABUSE']).size().unstack()
      .plot(kind='bar', stacked=True, figsize=(15, 5))
like image 3
kamran kausar Avatar answered Oct 31 '22 23:10

kamran kausar