A **grouped barplot** is used when you have several **groups**, and **subgroups** into these groups. Here is a method to make them using the matplotlib library.

Note that you can easily turn it as a stacked area barplot, where each subgroups are displayed one on top of each other.

# libraries import numpy as np import matplotlib.pyplot as plt # set width of bar barWidth = 0.25 # set height of bar bars1 = [12, 30, 1, 8, 22] bars2 = [28, 6, 16, 5, 10] bars3 = [29, 3, 24, 25, 17] # Set position of bar on X axis r1 = np.arange(len(bars1)) r2 = [x + barWidth for x in r1] r3 = [x + barWidth for x in r2] # Make the plot plt.bar(r1, bars1, color='#7f6d5f', width=barWidth, edgecolor='white', label='var1') plt.bar(r2, bars2, color='#557f2d', width=barWidth, edgecolor='white', label='var2') plt.bar(r3, bars3, color='#2d7f5e', width=barWidth, edgecolor='white', label='var3') # Add xticks on the middle of the group bars plt.xlabel('group', fontweight='bold') plt.xticks([r + barWidth for r in range(len(bars1))], ['A', 'B', 'C', 'D', 'E']) # Create legend & Show graphic plt.legend() plt.show()

Pingback: Analysis of Facebook Engagement of conservationist NGOs: The case of WWF – Lynn's

There is a little error in your code.

Either r2 or r3 should be equals to [x – barWidth for x in r1]

For now, the two of them are equals to [x + barWidth for x in r1], which will cause them to stack on top of each other.

How to add percentages on top of these bars?

Can you add vale labels on the top of bars?