Nilani Algiriyage
Nilani Algiriyage

Reputation: 35636

Plotting Pandas DataFrames in to Pie Charts using matplotlib

Is it possible to print a DataFrame as a pie chart using matplotlib? The Pandas documentation on chart visualization has instructions for plotting lot of chart types including bar, histogram, scatter plot etc. But pie chart is missing?

Upvotes: 22

Views: 82457

Answers (3)

user2314737
user2314737

Reputation: 29307

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

Upvotes: 36

cmgerber
cmgerber

Reputation: 2279

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.

Upvotes: 23

Dan Allan
Dan Allan

Reputation: 35235

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.

Upvotes: 7

Related Questions