在 seaborn 中绘制多个布尔列
Plotting Multiple boolean cols in seaborn
我得到了一个包含两列的 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 列。
Seaborn 使用 "long form" 中的数据框最简单。 Pandas' melt()
可以合并列。使用 kind='count'
,seaborn 进行计数。要在图例中为 0
和 1
命名,.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
我得到了一个包含两列的 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 列。
Seaborn 使用 "long form" 中的数据框最简单。 Pandas' melt()
可以合并列。使用 kind='count'
,seaborn 进行计数。要在图例中为 0
和 1
命名,.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