Plotting multiple bar charts using Matplotlib in Python
Last Updated :
09 Apr, 2025
Matplotlib is a powerful visualization library in Python that allows for the creation of various types of plots, including bar charts. When working with multiple bar charts, we can represent data in two main ways, grouped bar charts (multiple bars within one chart) and separate bar charts (multiple figures for different data sets). Let's explore each one in detail.
Using ax.bar() in a single plot
ax.bar() is part of Matplotlib's object-oriented interface, where you explicitly create and control axes (ax) using plt.subplots(). This method is preferred when building complex layouts, multiple subplots or customized visualizations. It gives you fine-grained control over every element of the plot.
Python
import numpy as np
import matplotlib.pyplot as plt
cats = ['A', 'B', 'C', 'D'] # categories
vals1, vals2 = [4, 7, 1, 8], [5, 6, 2, 9]
# Bar width and x locations
w, x = 0.4, np.arange(len(cats))
fig, ax = plt.subplots()
ax.bar(x - w/2, vals1, width=w, label='Set 1')
ax.bar(x + w/2, vals2, width=w, label='Set 2')
ax.set_xticks(x)
ax.set_xticklabels(cats)
ax.set_ylabel('Values')
ax.set_title('Grouped Bar Chart')
ax.legend()
plt.show()
Output
Using ax.bar()Explanation: This code defines categories and values, sets bar width and x-axis positions, and plots two datasets side by side using ax.bar(). It adjusts x-axis labels and adds a legend for clarity before displaying the chart.
Using plt.bar() in a single plot
plt.bar() belongs to Matplotlib’s state-machine (pyplot) interface, which manages the figure and axes behind the scenes. It is great for quick and simple plots when you don't need multiple subplots or deep customization. However, it offers less flexibility compared to the object-oriented approach.
Python
import numpy as np
import matplotlib.pyplot as plt
cats = ['A', 'B', 'C', 'D']
v1, v2 = [4, 7, 1, 8], [5, 6, 2, 9]
w, x = 0.4, np.arange(len(cats))
plt.bar(x - w/2, v1, w, label='Set 1')
plt.bar(x + w/2, v2, w, label='Set 2')
plt.xticks(x, cats)
plt.ylabel('Values')
plt.title('Grouped Bar Chart')
plt.legend()
plt.show()
Output

Explanation: This code defines categories and values, sets bar width and x-axis positions, and plots two datasets side by side using plt.bar(). It adjusts x-axis labels, adds a title and legend for clarity, and displays the chart.
Using subplots(plt.subplots()) for seperate charts
With plt.subplots(), multiple bar charts can be plotted within a single figure but in different axes. This method is ideal when you want to compare datasets visually while keeping them separate. It provides a clean, organized layout with each dataset in its own subplot.
Python
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
# First dataset
axes[0].bar(categories, values1, color='blue')
axes[0].set_title("Set 1")
axes[0].set_ylabel("Values")
# Second dataset
axes[1].bar(categories, values2, color='green')
axes[1].set_title("Set 2")
axes[1].set_ylabel("Values")
plt.tight_layout()
plt.show()
Using subplotsExplanation: This code creates two side-by-side subplots using plt.subplots(), each displaying a bar chart for a separate dataset. It assigns titles and labels to each subplot, adjusts layout spacing with plt.tight_layout() and displays the figure.
This method creates entirely separate figures for each dataset using plt.figure(), ensuring complete independence between plots. It is useful when each dataset requires its own visualization without sharing the same figure, making it easier to analyze them individually.
Python
import matplotlib.pyplot as plt
plt.figure()
plt.bar(categories, values1, color='blue')
plt.title("Set 1")
plt.ylabel("Values")
plt.show()
plt.figure()
plt.bar(categories, values2, color='green')
plt.title("Set 2")
plt.ylabel("Values")
plt.show()
Output
Using plt.figure()
Using plt.figure()Explanation: This code creates two separate figures using plt.figure(), each displaying a bar chart for a different dataset. It assigns titles and labels independently to each figure and displays them separately.
Similar Reads
Plotting Histogram in Python using Matplotlib Histograms are a fundamental tool in data visualization, providing a graphical representation of the distribution of data. They are particularly useful for exploring continuous data, such as numerical measurements or sensor readings. This article will guide you through the process of Plot Histogram
6 min read
Bar chart using Plotly in Python Plotly is a Python library which is used to design graphs, especially interactive graphs. It can plot various graphs and charts like histogram, barplot, boxplot, spreadplot, and many more. It is mainly used in data analysis as well as financial analysis. Plotly is an interactive visualization librar
4 min read
Python | Basic Gantt chart using Matplotlib Prerequisites : Matplotlib IntroductionIn this article, we will be discussing how to plot a Gantt Chart in Python using Matplotlib.A Gantt chart is a graphical depiction of a project schedule or task schedule (In OS). It's is a type of bar chart that shows the start and finish dates of several eleme
3 min read
Matplotlib.pyplot.barbs() in Python Matplotlib is a library of Python bindings which provides the user with a MATLAB-like plotting framework. Matplotlib can be used in Python scripts, the Python and IPython shell, web application servers, and various graphical user interface toolkits like Tkinter, awxPython, etc. Note: For more inform
3 min read
Matplotlib.pyplot.barh() function in Python A bar plot or bar chart is a graph that represents the category of data with rectangular bars with lengths and heights that is proportional to the values which they represent. The bar plots can be plotted horizontally or vertically. A bar chart describes the comparisons between the discrete categori
3 min read