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)
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.