22

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?

3 Answers 3

36

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

Sign up to request clarification or add additional context in comments.

1 Comment

Funny how yours is the only one with an image. It also highlights other useful parameters. This should be the best answer.
23

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.

1 Comment

This solution is confusing and it seems you assume a number of things. What is df? What is Data?
7
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.

2 Comments

Thanks very much for your answer. It works fine. But how to put chart labels based on DataFrame column names?
Read the documentation for pie, and use the DataFrame's .columns.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.