Plotting Pandas DataFrames in to Pie Charts using matplotlib

To plot a pie chart from a dataframe df you can use Panda's plot.pie:

df.plot.pie(y='column_name')

Example:

import pandas as pd

df = pd.DataFrame({'activity': ['Work', 'Sleep', 'Play'],
                   'hours': [8, 10, 6]})
df.set_index('activity', inplace=True)
print(df)
#               hours
# activity       
# Work          8
# Sleep        10
# Play          6
plot = df.plot.pie(y='hours', figsize=(7, 7))

Note that the labels of the pie chart are the index entries, this is the reason for using set_index to set the index to activity.

To style the plot, you can use all those arguments that can be passed to DataFrame.plot(), here an example showing percentages:

plot = df.plot.pie(y='hours', title="Title", legend=False, \
                   autopct='%1.1f%%', explode=(0, 0, 0.1), \
                   shadow=True, startangle=0)

Pie chart from Pandas dataframe


import matplotlib.pyplot as plt
plt.pie(DataFrame([1,2,3]))

seems to work as expected. If the DataFrame has more than one column, it will raise.


Pandas has this built in to the pd.DataFrame.plot(). All you have to do is use kind='pie' flag and tell it which column you want (or use subplots=True to get all columns). This will automatically add the labels for you and even do the percentage labels as well.

import matplotlib.pyplot as plt

df.Data.plot(kind='pie')

To make it a little more customization you can do this:

fig = plt.figure(figsize=(6,6), dpi=200)
ax = plt.subplot(111)

df.Data.plot(kind='pie', ax=ax, autopct='%1.1f%%', startangle=270, fontsize=17)

Where you tell the DataFrame that ax=ax. You can also use all the normal matplotlib plt.pie() flags as shown above.