Product

Thursday, 23 March 2023

pandas plot multiple columns bar chart - grouped and stacked chart

 In this article, we will see how to create a grouped bar chart and stacked chart using multiple columns of a pandas dataframe

Here are the steps that we will follow in this article to build this multiple column bar chart using seaborn and pandas plot function

  • Create a test dataframe
  • Build a grouped bar chart using pandas plot function
  • Create a pivot table to create a stacked bar chart
  • Build a multiple column bar chart using seaborn

Create a dataframePermalink

We will first create a test dataframe with monetary details for an year. It has got four columns - month, sales, tax and profit.

df=pd.DataFrame(
                {'month': 
                         ['jan', 'feb', 
                          'mar', 'apr', 
                          'may', 'jun', 
                          'jul', 'aug', 
                          'sep', 'oct', 
                          'nov', 'dec'],
              'sales': [45, 13, 28, 32, 
                        40, 39, 26, 35, 
                        22, 18, 42, 30],
              'tax': [5, 2, 4, 6, 8, 7, 
                           3, 5, 3, 2, 10, 6],
              'profit': [40, 11, 24, 26, 32, 32, 
                         23, 30, 32, 20, 8, 36]})

df

This is how our test dataframe looks like:

  Month Sales Tax Profit
0 jan 45 5 40
1 feb 13 2 11
2 mar 28 4 24
3 apr 32 6 26
4 may 40 8 32
5 jun 39 7 32
6 jul 26 3 23
7 aug 35 5 30
8 sep 22 3 32
9 oct 18 2 20
10 nov 42 10 8
11 dec 30 6 36

Create a grouped bar chat with multiple columnsPermalink

Pandas plot:Permalink

We will use pandas plot function and pass month column as x parameter and all other columns as list to y parameter

(df.plot(
        x='month', 
        y=['sales','profit', 'tax-paid'], 
        kind='bar', 
        figsize=(5,5))
        .legend( bbox_to_anchor =(1 ,1)
       )
)

Horizontal bar plot:

Update the kind parameter to barh to create a horizontal bar chart

(df.plot(
          x='month', 
          y=['sales','profit', 'tax-paid'], 
          kind='barh', 
          figsize=(5,5))
        .legend( bbox_to_anchor =(1 ,1)
       )
)

Pivot table plot:Permalink

We could also create the grouped bar chart with multiple columns by first creating a pivot table from the dataframe and then plot it

(
  pd.pivot_table(
               df, 
               index=['month'], 
               sort=False)
              .plot(kind='bar', 
                    figsize=(5,5))
              .legend( bbox_to_anchor =(1 ,1)
               )
)

Create a stacked bar chatPermalink

Just in case, you would like to plot the stacked bar chart of all those columns instead of a grouped bar chart, we could just add a stacked parameter in the pandas plot function to built it

(
  pd.pivot_table(
               df, 
               index=['month'], 
               sort=False)
              .plot(kind='bar', 
                    figsize=(5,5),
                    stacked = True)
              .legend( bbox_to_anchor =(1 ,1)
               )
)

#OR

(
  df.plot(
          x='month', 
          y=['sales','profit', 'tax-paid'], 
          kind='bar', 
          figsize=(5,5), 
          stacked=True)
        .legend( bbox_to_anchor =(1 ,1)
         )
)

Create a grouped bar chat using seabornPermalink

Seaborn provides some easy to plot grouped bar charts functions, we need to first reshape the dataframe and melt it so that we have a dataframe in long format as shown here

df1=pd.melt(
            df, 
            id_vars="month", 
            var_name="revenue", 
            value_name="amount"
      )
df1
  Month Accounts_category Amount
0 jan sales 45
1 jan tax-paid 5
2 jan profit 40
3 feb sales 13
4 feb tax-paid 2
5 feb profit 11
6 mar sales 28
7 mar tax-paid 4
8 mar profit 24

To plot a grouped bar chart, we could use either seaborn barplot or catplot

fig, ax = plt.subplots(figsize=(8, 8), dpi=100)

sns.barplot(
              x='month', 
              y='amount', 
              hue='revenue', 
              data=df1,  
              ax=ax
            )

# OR

sns.catplot(
            x='month', 
            y='amount', 
            hue='revenue', 
            data=df1, 
            kind='bar'
          )

No comments:

Post a Comment

Connect broadband

AI:List AI views on when for a naive kin after prolonged life suppression coercive behaviour by family members after demise of father with trauma for kin ocd formed after forced to do rituals, family tribal values honor specific activities, utmost religious activities occult witchcraft enforced to do by elder sibling his wife and mother thrice with great celibacy turned the kundalini activated after deep celibacy penance shouting physical Mental financial Extortion by sibling with toxic behaviours and the wife mother and then mockery suppression asking about who’re your worth backbiting among relatives sector toon negligence of intelligence intuitive behaviour- all religious psychological traps when not work and lead to loss of consciousness of kin trance state recovered by governance with technocrats using AI - kin was asked by mother that he’s to go the male should not be seen in house he’s many absurd thought forcefully in brain mind and outsiders already feel awkward of this kin unresponsive behaviour due to TBI PTSD ocd cvt and tell at workplace social gathering he’s to go and asked for sector toon extortion and mockery in various sense due to un practical behaviour negligence of body building due to neglect ion if essential food nutrition and stubbed suppressed in every sense in religious psychological traps by family members AI humanoid using various neural networks and LLMs for kin and required steps.

  List AI views on when for a naive kin after prolonged life suppression coercive behaviour by family members after demise of father with tr...