如何在 pandas 中制作非数值数据的条形图
How to make a bar plot of non-numerical data in pandas
假设我有这个数据:
>>> df = pd.DataFrame(data={"age": [11, 12, 11, 11, 13, 11, 12, 11],
"response": ["Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "Yes"]})
>>> df
age response
0 11 Yes
1 12 No
2 11 Yes
3 11 Yes
4 13 Yes
5 11 No
6 12 Yes
7 11 Yes
我想制作一个条形图,显示按年龄汇总的是或否的回答。有可能吗?我试过 hist
和 kind=bar
,但都无法按年龄排序,而是分别绘制年龄和反应。
看起来像这样:
^
4 | o
3 | o
2 | o
1 | ox ox o
0 .----------------------->
11 12 13
其中 o
是 "Yes",x
是 "No"。
另外,请问可以把号码分组吗?例如,如果范围从 11 到 50,则可以将其放入 5 年的容器中。另外,是否可以在轴上或单个条上显示百分比或计数?
要生成多条形图,您首先需要按年龄和反应分组,然后拆开数据框:
df=df.groupby(['age','response']).size()
df=df.unstack()
df.plot(kind='bar')
这是输出图:
要 bin
您的数据,请查看 pandas.cut()
see docs. For categorical plots, I've found the seaborns
package quite helpful - see the tutorial on categorical plots。下面是您使用随机样本提到的箱子的 yes/no 计数图的示例:
df = pd.DataFrame(data={"age": randint(10, 50, 1000),
"response": [choice(['Yes', 'No']) for i in range(1000)]})
df['age_group'] = pd.cut(df.age, bins=[g for g in range(10, 51, 5)], include_lowest=True)
df.head()
age response age_group
0 48 Yes (45, 50]
1 31 No (30, 35]
2 25 Yes (20, 25]
3 29 Yes (25, 30]
4 19 Yes (15, 20]
import seaborn as sns
sns.countplot(y='response', hue='age_group', data=df, palette="Greens_d")
假设我有这个数据:
>>> df = pd.DataFrame(data={"age": [11, 12, 11, 11, 13, 11, 12, 11],
"response": ["Yes", "No", "Yes", "Yes", "Yes", "No", "Yes", "Yes"]})
>>> df
age response
0 11 Yes
1 12 No
2 11 Yes
3 11 Yes
4 13 Yes
5 11 No
6 12 Yes
7 11 Yes
我想制作一个条形图,显示按年龄汇总的是或否的回答。有可能吗?我试过 hist
和 kind=bar
,但都无法按年龄排序,而是分别绘制年龄和反应。
看起来像这样:
^
4 | o
3 | o
2 | o
1 | ox ox o
0 .----------------------->
11 12 13
其中 o
是 "Yes",x
是 "No"。
另外,请问可以把号码分组吗?例如,如果范围从 11 到 50,则可以将其放入 5 年的容器中。另外,是否可以在轴上或单个条上显示百分比或计数?
要生成多条形图,您首先需要按年龄和反应分组,然后拆开数据框:
df=df.groupby(['age','response']).size()
df=df.unstack()
df.plot(kind='bar')
这是输出图:
要 bin
您的数据,请查看 pandas.cut()
see docs. For categorical plots, I've found the seaborns
package quite helpful - see the tutorial on categorical plots。下面是您使用随机样本提到的箱子的 yes/no 计数图的示例:
df = pd.DataFrame(data={"age": randint(10, 50, 1000),
"response": [choice(['Yes', 'No']) for i in range(1000)]})
df['age_group'] = pd.cut(df.age, bins=[g for g in range(10, 51, 5)], include_lowest=True)
df.head()
age response age_group
0 48 Yes (45, 50]
1 31 No (30, 35]
2 25 Yes (20, 25]
3 29 Yes (25, 30]
4 19 Yes (15, 20]
import seaborn as sns
sns.countplot(y='response', hue='age_group', data=df, palette="Greens_d")