使用 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 图
matplotlib/pandas 中是不是有参数将直方图的 Y 轴作为百分比?