Pie Charts with Matplotlib
Learn to build informative pie charts in Python using Matplotlib.

Topics Covered
- What is a Pie chart?
- Syntax of pie chart function
- Plot a pie chart in Matplotlib
- Customizing a pie chart in Python
What is a Pie chart?
A pie chart is a circular statistical graphic, which is divided into slices to illustrate numerical proportions. In a pie chart, the arc length of each slice is proportional to the quantity it represents.
A pie chart consists of a circle with each pie representing a specific category. Unlike bar and line charts, pie charts donot show changes over time.
Syntax of pie chart function
The syntax of pie()
function is given below.
matplotlib.pyplot.pie(data, explode=None, labels=None, colors=None, autopct=None, shadow=False)
- data - The array of data values to be plotted
- labels - It is a list of sequence of strings which sets the label of each slice.
- color - Adds color to the slices.
- autopct - It is used to label the slices with their numerical value.
- shadow - It is used to create the shadow for each slice
Plot a pie chart in Matplotlib
Let's try to plot the sales of different products sold by a retailer for a particular month.

Let's plot a basic pie chart with Matplotlib to show the percentage of sales per product.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels)
ax1.axis('equal')
plt.show()
The above code generates the following figure.

By default the plotting of the first slice starts from the x-axis and moves counterclockwise.
Customizing a pie chart in Python
Rotating the pie chart
As mentioned the default start angle of a slice is at the x-axis. You can change the start angle by specifying a startangle
parameter. It is defined with an angle in degrees, default angle is 0.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, startangle = 30)
ax1.axis('equal')
plt.show()

Making a slice pop out
Maybe you want one of the slices to pop out? The explode
parameter allows you to pop one or more slices as per your requirement. The explode
parameter must be an array with one value for each slice. Each value represents how far from the center each slice is displayed.
Let's try to explode the 2nd slice.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
explode = (0, 0.2, 0, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, startangle = 30)
ax1.axis('equal')
plt.show()

To pop out all slices, add an explode value for each of the slice.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
explode = (0.1, 0.2, 0.3, 0.4, 0.5)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode, labels=labels, startangle = 30)
ax1.axis('equal')
plt.show()

Displaying the percentage for each slice
To display the percentage of each slice, use the autopct
parameter in your code.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, startangle = 30, autopct='%1.1f%%')
ax1.axis('equal')
plt.show()

Adding a shadow
You can add a shadow to the pie chart by setting the shadows
parameter to True
.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
explode = (0, 0.2, 0, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, shadow=True, explode=explode, labels=labels, startangle = 30)
ax1.axis('equal')
plt.show()

Changing colors of the slices
You can choose to define the color of each wedge using the colors
parameter. It must be an array with one value for each slice.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
explode = (0, 0.2, 0, 0, 0)
colors = ["black", "red", "blue", "#CB7B97", "m"]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, colors=colors, shadow=True, explode=explode, labels=labels, startangle = 30)
ax1.axis('equal')
plt.show()

You can use any Hexadecimal color values, any of the 140 supported color names, or one of these shortcuts:
'r'
- Red'g'
- Green'b'
- Blue'c'
- Cyan'm'
- Magenta'y'
- Yellow'k'
- Black'w'
- White
Adding legend to your pie chart
Use the legend()
function to add necessary legends for each of the slices.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
explode = (0, 0.2, 0, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, shadow=True, explode=explode, labels=labels, startangle = 30)
ax1.axis('equal')
plt.legend()
plt.show()

If you want to add a header to the legend, use the title
parameter with the legend
function.
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B', 'Product C', 'Product D', 'Product E']
sizes = [23, 28, 42, 18, 36]
explode = (0, 0.2, 0, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(sizes, shadow=True, explode=explode, labels=labels, startangle = 30)
ax1.axis('equal')
plt.legend(title = 'Sales percentage')
plt.show()

Pylenin has a dedicated Youtube playlist for Matplotlib Tutorial. Check out our entire Matplotlib playlist here.