如何使用不同范围的数据框组绘制饼图?

Posted

技术标签:

【中文标题】如何使用不同范围的数据框组绘制饼图?【英文标题】:How to plot pie chart using data frame group by different range? 【发布时间】:2018-03-14 12:45:25 【问题描述】:

我的代码是:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style

df=pd.read_csv("patient1.csv")
a=df.loc[df.Age<18,['Age']]
print(a)
b=df.loc[(df.Age >= 18) & (df.Age < 60),['Age']]
print(b)
c=df.loc[df.Age>=60,['Age']]
print(c)
d=pd.concat([a,b,c],keys=["0-17","18-59","60+"])
e=d.loc[:,['Age']]
print(e)

文件 patient1.csv 包含以下数据:

Name    Surname Age
fdgf    bcbb    21
Yash    Singhvi 19
Yash    Singhvi 19
piyush  daga    20
cvcv    dfg     16
sdsd    sdsd    65
dsfef   fedf    12
rfef    fefe    70
fdgf    rgd     10

实际上,我想绘制 0-17,18-59,60+ 岁患者的饼图。从代码中可以看出,我已经将不同年龄范围的数据框进行了分离。我需要在代码中添加什么来绘制饼图?

【问题讨论】:

我有点困惑——你需要什么情节?每个范围的总和或平均值?还是别的什么? 我想在饼图上绘制 0-17,18-59,60+ 范围内的年龄。 我明白,但我想念它的逻辑。因为显然每个范围只需要一个值... 这就是我想要的绘图方式:- drive.google.com/… 好的,这就是我所说的 - 只需要 3 个数字,每个范围一个。 【参考方案1】:

您首先需要cut 来创建ranges。然后groupby,聚合size并通过unstack重塑。

最后使用DataFrame.plot.pie

df['bins'] = pd.cut(df['Age'],bins=[0,17,59,120], labels=["0-17","18-59","60+"])
df = df.groupby(['Age', 'bins']).size().unstack(fill_value=0)
print (df)
bins  0-17  18-59  60+
Age                   
10       1      0    0
12       1      0    0
16       1      0    0
19       0      2    0
20       0      1    0
21       0      1    0
65       0      0    1
70       0      0    1

df.plot.pie(subplots=True,figsize=(8, 3))

编辑:

a = df.groupby('bins').size()
#a = df['bins'].value_counts()
print (a)
bins
0-17     3
18-59    4
60+      2
dtype: int64

a.plot.pie(figsize=(4,4))

【讨论】:

实际上这是来自单个文件的数据,它们是三个标签,即 0-17, 18-59, 60+ ,而不是三个不同的图。那你怎么知道我只需要一个饼图 有 3 个范围,所以需要 3 个图表。还是少了什么? 可能需要df.groupby(['Age']).size().plot.pie() - 但没有关于垃圾箱的信息。 嗯,也许最好的办法是尝试在 excel 中创建这个图表并发布图片,因为我们似乎不了解对方。 我只需要一个包含 0-17,18-59,60+ 部分的饼图。

以上是关于如何使用不同范围的数据框组绘制饼图?的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制图像颜色的 KMeans 饼图

饼图绘制

如何绘制条形图和饼图 iPhone sdk?

R语言 | 绘制饼图(扇形图)方法示例

如何绘制一个颜色列表的饼图

隐藏饼图数据为0项区域