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

问题描述 投票:0回答:2

这可能是一个简单的任务,但是我对使用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的总数,但我也需要除以性别。

希望我说得通

python pandas matplotlib plot seaborn
2个回答
0
投票

您可以摆在桌子上:

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


0
投票

如果您想要交互式版本,则可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.