【问题标题】:Plotting Multiple boolean cols in seaborn在seaborn中绘制多个布尔列
【发布时间】:2022-01-18 20:06:39
【问题描述】:

我有一个包含两列的 DF,显示一个人在本月和上一月是否有部门。

Moroso morosoant
1      0
1      1
0      0

所以我想绘制两个列的已付和未付金额。

我已经试过这个来绘制 on 的值

sn.catplot(kind="bar",x="MOROSO",y="MOROSO",data=pd.DataFrame(df["MOROSO"].value_counts()))

我想在 moroso 列旁边添加 morosoant col。

【问题讨论】:

  • 您希望如何显示来自morosoant 的计数值?您还想要两个条形图,还是要将这些条形图与MOROSO 中的当前条形图配对?
  • 接下来我想添加 morosoant col 以保持颜色区别

标签: python pandas seaborn bar-chart


【解决方案1】:

Seaborn 最容易使用 "long form" 中的数据框。 Pandas 的melt() 可以合并列。使用kind='count',seaborn 进行计数。要为图例中的0s 和1s 命名,.replace() 可以将它们更改为字符串。 Matplotlib 的新 bar_label 函数用它们的值标记条形。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

df = pd.DataFrame({'Moroso': np.random.randint(0, 2, 100),
                   'Morosoant': np.random.randint(0, 2, 100)})
df_long = df.melt(value_vars=['Moroso', 'Morosoant'], value_name='Legend').replace({'Legend': {0: 'No', 1: 'Yes'}})
sns.set_style('whitegrid')
g = sns.catplot(kind='count', data=df_long,
                x='variable', hue='Legend', palette='Set1', height=4, aspect=2)
g.set(xlabel='')
for ax in g.axes.flat:
    for bars in ax.containers:
        ax.bar_label(bars)
plt.subplots_adjust(left=0.07, bottom=0.15)
plt.show()

PS:如果df 看起来像:

   Moroso  Morosoant
0       0          1
1       1          1
2       1          0
3       1          1
4       0          1

然后df_long(替换之前)将如下所示:

    variable  Legend
0     Moroso       0
1     Moroso       1
2     Moroso       1
3     Moroso       1
4     Moroso       0
5  Morosoant       1
6  Morosoant       1
7  Morosoant       0
8  Morosoant       1
9  Morosoant       1

【讨论】:

  • 非常感谢,这正是我想要的。我在其他帖子中看到了融化,但我没有明白,我会阅读更多关于它的内容。
猜你喜欢
  • 2018-05-13
  • 2021-11-03
  • 1970-01-01
  • 2021-04-28
  • 2017-11-17
  • 2020-09-26
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多