【问题标题】:How to plot a bar plot of 2 categorical columns using matplotlib or seaborn如何使用 matplotlib 或 seaborn 绘制 2 个分类列的条形图
【发布时间】:2023-03-16 05:00:02
【问题描述】:

这可能是一项简单的任务,但我是 python 绘图的新手,正在努力将逻辑转换为代码。我有 2 列,如下所示。 0 表示未流失,1 表示已流失。性别是一个对象列,流失是一个类别列

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

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

我试过了:

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

它给了我每个 0 和 1 的总数,但我也需要将它除以性别。

希望我说得通

【问题讨论】:

  • 你有 2 张桌子,搅动和未搅动对吧?

标签: python pandas matplotlib plot seaborn


【解决方案1】:

你可以把它放在桌子上:

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)

【讨论】:

  • 很好的解决方案@StupidWolf。请问你能分享在matplotlib中做同样的代码吗?
  • 抱歉,我可能遗漏了一些东西。您正在使用这个将 matplotlib 调用到 pandas 数据帧上。您实际上是指使用 matplotlib 从头开始​​做吗
  • 抱歉让我说清楚。我正在学习 matplotlib,请原谅我的无知。当我尝试您的代码时,它可以完美运行,但是当我尝试在特定的子图中绘制它时,它不起作用并且正在外面绘制,因为这不是使用 pyplot 模块绘制的。希望有意义吗?
  • fig, axs = plt.subplots(1, 2) pd.crosstab(df['churned'],df['gender']).plot(kind="bar",stacked=True,ax=axs[0])
【解决方案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]: 

【讨论】:

  • 谢谢@mmRmmR。我正在学习 matplotlib,请原谅我的无知。我想使用 pyplot 模块或 seaborn 来绘制它,因为这将有助于我学习。请你能帮助我如何使用 pyplot 模块或 seaborn 来绘制相同的图吗?希望我说得通。非常感谢
猜你喜欢
  • 2019-07-29
  • 2023-01-20
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2021-07-28
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多