使用 matplotlib 将 Pandas DataFrames 绘制到饼图中

Posted

技术标签:

【中文标题】使用 matplotlib 将 Pandas DataFrames 绘制到饼图中【英文标题】:Plotting Pandas DataFrames in to Pie Charts using matplotlib 【发布时间】:2014-02-01 03:23:39 【问题描述】:

是否可以使用 matplotlib 将DataFrame 打印为饼图? This 有绘制很多图表类型的说明,包括条形图、直方图、散点图等。但是缺少饼图?

【问题讨论】:

【参考方案1】:
import matplotlib.pyplot as plt
plt.pie(DataFrame([1,2,3]))

似乎按预期工作。如果 DataFrame 的列多于一列,则会引发。

【讨论】:

非常感谢您的回答。它工作正常。但是如何根据 DataFrame 列名放置图表标签呢? 阅读pie的文档,并使用DataFrame的.columns【参考方案2】:

Pandas 在pd.DataFrame.plot() 中内置了这个功能。您所要做的就是使用kind='pie' 标志并告诉它您想要哪一列(或使用subplots=True 获取所有列)。这会自动为您添加标签,甚至还会添加百分比标签。

import matplotlib.pyplot as plt

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

要使其更具自定义性,您可以这样做:

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)

您在哪里告诉DataFrame ax=ax。您还可以使用所有正常的matplotlib plt.pie() 标志,如上所示。

【讨论】:

这个解决方案令人困惑,您似乎假设了很多事情。什么是df?什么是数据?【参考方案3】:

要从数据框 df 绘制饼图,您可以使用 Panda 的 plot.pie

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

例子:

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

注意饼图的标签是索引条目,这就是使用set_index将索引设置为activity的原因。

要设置绘图样式,您可以使用所有可以传递给DataFrame.plot() 的参数,这里是一个显示百分比的示例:

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

【讨论】:

有趣的是,你是唯一一个有图像的人。它还突出显示了其他有用的参数。这应该是最好的答案。

以上是关于使用 matplotlib 将 Pandas DataFrames 绘制到饼图中的主要内容,如果未能解决你的问题,请参考以下文章

如何将时间范围绘制为 Pandas 或 MatPlotLib 中的值

使用 matplotlib 和 pandas 制作 groupby 图

Pandas与Matplotlib基础

matplotlib/pandas 中是不是有参数将直方图的 Y 轴作为百分比?

使用 matplotlib 子图绘制 pandas groupby 输出

使用 Matplotlib 更改图形颜色以绘制 Pandas 数据框