Recipe: How to generate stacked BAR plot in Python?
DATA VISUALIZATION

How to generate stacked BAR plot in Python?

This recipe helps you generate stacked BAR plot in Python
In [2]:
## How to generate stacked BAR plot in Python
def Snippet_119():
    print()
    print(format('How to generate stacked BAR plot in Python','*^82'))

    import warnings
    warnings.filterwarnings("ignore")

    # load libraries
    import pandas as pd
    import matplotlib.pyplot as plt

    # Create dataframe
    raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
                'pre_score': [4, 24, 31, 2, 3],
                'mid_score': [25, 94, 57, 62, 70],
                'post_score': [5, 43, 23, 23, 51]}
    df = pd.DataFrame(raw_data, columns = ['first_name', 'pre_score', 'mid_score', 'post_score'])
    print(); print(df)

    # Create a figure with a single subplot
    f, ax = plt.subplots(1, figsize=(10,5))

    # Set bar width at 1
    bar_width = 1

    # positions of the left bar-boundaries
    bar_l = [i for i in range(len(df['pre_score']))]

    # positions of the x-axis ticks (center of the bars as bar labels)
    tick_pos = [i+(bar_width/2)-0.5 for i in bar_l]

    # Create the total score for each participant
    totals = [i+j+k for i,j,k in zip(df['pre_score'], df['mid_score'], df['post_score'])]

    # Create the percentage of the total score the pre_score value for each participant was
    pre_rel = [i / j * 100 for  i,j in zip(df['pre_score'], totals)]

    # Create the percentage of the total score the mid_score value for each participant was
    mid_rel = [i / j * 100 for  i,j in zip(df['mid_score'], totals)]

    # Create the percentage of the total score the post_score value for each participant was
    post_rel = [i / j * 100 for  i,j in zip(df['post_score'], totals)]

    # Create a bar chart in position bar_1
    ax.bar(bar_l, pre_rel, label='Pre Score', alpha=0.9, width=bar_width, edgecolor='white')

    # Create a bar chart in position bar_1
    ax.bar(bar_l, mid_rel, bottom=pre_rel, label='Mid Score', alpha=0.9, width=bar_width,
           edgecolor='white')

    # Create a bar chart in position bar_1
    ax.bar(bar_l, post_rel, bottom=[i+j for i,j in zip(pre_rel, mid_rel)],
           label='Post Score', alpha=0.9, width=bar_width, edgecolor='white')

    # Set the ticks to be first names
    print(tick_pos)
    plt.xticks(tick_pos, df['first_name'])
    ax.set_ylabel("Percentage")
    ax.set_xlabel("")

    # Let the borders of the graphic
    plt.xlim([min(tick_pos)-bar_width, max(tick_pos)+bar_width])
    plt.ylim(-10, 110)

    # rotate axis labels
    plt.setp(plt.gca().get_xticklabels(), rotation=45)
    plt.show()

Snippet_119()
********************How to generate stacked BAR plot in Python********************

  first_name  pre_score  mid_score  post_score
0      Jason          4         25           5
1      Molly         24         94          43
2       Tina         31         57          23
3       Jake          2         62          23
4        Amy          3         70          51
[0.0, 1.0, 2.0, 3.0, 4.0]


Stuck at work?
Can't find the recipe you are looking for. Let us know and we will find an expert to create the recipe for you. Click here
Companies using this Recipe
1 developer from ANAC
1 developer from HvH
1 developer from Vodafone