20

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?

user2314737
  • 27,088
  • 20
  • 102
  • 114
Nilani Algiriyage
  • 32,876
  • 32
  • 87
  • 121

3 Answers3

30

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

user2314737
  • 27,088
  • 20
  • 102
  • 114
  • 2
    Funny how yours is the only one with an image. It also highlights other useful parameters. This should be the best answer. – Dave Liu Jul 26 '21 at 23:53
22

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.

taras
  • 6,566
  • 10
  • 39
  • 50
cmgerber
  • 2,199
  • 3
  • 16
  • 15
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.

Dan Allan
  • 34,073
  • 6
  • 70
  • 63