Matplotlib: Pie Chart

A pie chart is a type of graph in which a circle is partitioned into sectors (also called wedges or slices) occupying relative area of data.

In this tutorial, we will plot a pie chart using Matplotlib.

matplotlib pie chart with legend

The below Matplotlib program plots a basic pie chart with the pie() function. The autopct parameter is where the wedges are labelled with string or numeric value. The value %.1f%% is the Python number format .1f% (which includes the percentage symbol %), rounding off the number to one decimal place. The format %.2f%% will round off the values into two decimal places.

				
					import matplotlib.pyplot as plt
					labels = 'Dalmatians', 'Beagles', 'Labradors', 'German Shepherds'
					sizes = [6, 10, 15, 9]
					fig, ax = plt.subplots()
					ax.pie(sizes, labels=labels, autopct='%.1f%%')
					plt.show()
				
			
matplotlib pie chart without equal axes

Equal Axes

To above chart is oval-shaped. To fix the shape into a perfect circle, we need to keep the figure and axes aspect equal. The set_aspect() method sets the desired aspect.

					
					import matplotlib.pyplot as plt
					labels = 'Dalmatians', 'Beagles', 'Labradors', 'German Shepherds'
					sizes = [6, 10, 15, 9]
					fig, ax = plt.subplots()
					ax.pie(sizes, labels=labels, autopct='%.1f%%')
					ax.set_aspect('equal') 
					plt.show()
					
				
matplotlib pie chart with equal axes

Explode/Expand Slices

The explode parameter lets you explode/expand a wedge/slice. Below we expand the first slice by 0.1 fraction of the radius of the pie.

					
					import matplotlib.pyplot as plt
					labels = 'Dalmatians', 'Beagles', 'Labradors', 'German Shepherds'
					sizes = [6, 10, 15, 9]
					explode = (0.1, 0, 0, 0)
					fig, ax = plt.subplots()
					ax.pie(sizes, labels=labels, autopct='%.1f%%')
					ax.set_aspect('equal') 
					plt.show()
					
				
matplotlib pie chart explode slice

Start Angle and Shadow

The shadow parameter draws a shadow beneath the pie slices. Also, by default, the first slice starts at the computed angle from the +ve x-axis in the counterclockwise direction. We can alter this starting angle using the startangle parameter. Below we assign the value 90 to make it start from the +ve y-axis.

					
					import matplotlib.pyplot as plt
					labels = 'Dalmatians', 'Beagles', 'Labradors', 'German Shepherds'
					sizes = [6, 10, 15, 9]
					explode = (0.1, 0, 0, 0)
					fig, ax = plt.subplots()
					ax.pie(sizes, labels=labels, autopct='%.1f%%', shadow=True, startangle=90)
					ax.set_aspect('equal') 
					plt.show()
					
				
matplotlib pie chart shadow start angle

Custom Colours

By default, the pie slices will pick the colours in the 10-palette default property cycle. So the first slice Dalmatians is coloured with (#1f77b4 ), Beagles with (#ff7f0e ), Labradors with (#2ca02c ) and German Shepherds with (#d62728 ).

matplotlib colors default property cycle

For applying custom colours, there is the colors parameter where we can give preferred colours in array-like sequence.

					
					import matplotlib.pyplot as plt
					labels = 'Dalmatians', 'Beagles', 'Labradors', 'German Shepherds'
					sizes = [6, 10, 15, 9]
					explode = (0.1, 0, 0, 0)
					colors = ('#22a6b3', '#e056fd', '#eb4d4b', '#badc58')
					fig, ax = plt.subplots()
					ax.pie(sizes, labels=labels, autopct='%.1f%%', shadow=True, 
						startangle=90, colors=colors)
					ax.set_aspect('equal')
					plt.show()
					
				
matplotlib pie chart

Legend

Similar to other plots, we can place a legend on our graph using the legend() function. Now we can do away with the labels parameter.

					
					import matplotlib.pyplot as plt
					labels = 'Dalmatians', 'Beagles', 'Labradors', 'German Shepherds'
					sizes = [6, 10, 15, 9]
					explode = (0.1, 0, 0, 0)
					fig, ax = plt.subplots()
					ax.pie(sizes, autopct='%.1f%%', shadow=True, startangle=90)
					ax.legend(labels, loc='upper right')
					ax.set_aspect('equal') 
					plt.show()
					
				
matplotlib pie chart with legend