如何使用matplotlib或seaborn绘制2个分类列的条形图

2024-05-15 21:12:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一项简单的任务,但我不熟悉python绘图,并且正在努力将逻辑转换为代码。我有两个专栏,如下所示。0表示未搅拌,1表示搅拌。性别是一个对象列,而搅动是一个类别列

gender|churned
--------------
male   |0
male   |1
female |0
female |1
female |1
male   |1

我只是想要一个x轴上有0和1(搅动列)的堆叠条形图(如果这不是正确的图形选择,请纠正我),对于这两个类别中的每一个,我想要一个每个性别有2种不同颜色的堆叠条形图,显示0以下的男性和女性总数(未搅动)以及1岁以下的男性和女性总数(翻滚)

我试过:

df.Churn.value_counts().plot(kind='bar') 

它给了我0和1的总计数,但我也需要它除以性别

希望我说的有道理


Tags: 对象代码绘图逻辑类别gendermalefemale
2条回答

如果需要交互式版本,则可以使用hvplot:

import pandas as pd
import hvplot.pandas #noqa
# 1. CREATE DF:
churn = pd.DataFrame({"gender":["male","male","female","female","female","male"],
                     "churned":[0,1,0,1,1,1]})
churn

Out[2]: 
   gender  churned
0    male        0
1    male        1
2  female        0
3  female        1
4  female        1
5    male        1
# 2. GROUP THE DATA BY "churned" THEN "gender":
plot_me = churn.groupby(["churned","gender"])[["gender"]].count().rename(columns={"gender":"count"})
plot_me

Out[3]: 
                count
churned gender       
0       female      1
        male        1
1       female      2
        male        2
# 3. PLOT:
plot_me.hvplot.bar(stacked=True,color=["maroon","teal"],line_width=3,
                   line_color="black",height=350,width=500)

Out[4]: 

enter image description here

您可以将其设置为:

import pandas as pd
df = pd.DataFrame({'gender':['male','male','female','female','female','male'],
                'churned':[0,1,0,1,1,1]})
pd.crosstab(df['churned'],df['gender']).plot(kind="bar",stacked=True)

enter image description here

相关问题 更多 >