我有一个如下所示的数据框:
我想在条形图中绘制回避者的百分比(Sidestepped == 1) .
ObstacleInterspace只有4个类别:0.0,0.50,0.75,1.70
性只是'm'或'f'
因此,如果在ObstacleInterspace 0.0,所有女性回避(1),这将是100%,如果只有7个女性回避0.0和3没有,这将是70% . 男性也一样 .
我试过这个:
x, y, hue = "ObstacleInterspace", "prop", "Sex"
hue_order = ["m", "f"]
f, axes = plt.subplots(1, 2)
sns.countplot(x=x, hue=hue, data=daten_csv, ax=axes[0]);
prop_df = (daten_csv[x]
.groupby(daten_csv[hue])
.value_counts(normalize=True)
.rename(y)
.reset_index())
sns.barplot(x=x, y=y, hue=hue, data=prop_df, ax=axes[1]);
它给了我这个图(计数与百分比):
该图仅显示每个ObstacleInterspace类别中所有女性/男性的百分比 . 但是我需要在ObstacleInterspace类别中所有人的数量和所有女性的数量的比例 .
我尝试按类别分组,这就是我所拥有的 . 我只是不知道如何绘制(如果可能的话,Seaborn,那将是非常好的!普通的matplotlib情节,也没关系!):
那么如何绘制这个群体,但作为百分比,而不是计数?
编辑:
我用这段代码解决了这个问题:
SideStepped_by_Obst_by_Sex = daten_csv.groupby(['ObstacleInterspace', 'Sex', 'Sidestepped']).agg({'Sidestepped': 'count'})
test = SideStepped_by_Obst_by_Sex.groupby(level=[0, 1]).apply(lambda g: g / g.sum())
test.plot.bar()
但是当你看xticks(0.0,f,1),(0.5,f,1)等时,情节并不那么明确 .
有人可以告诉我如何绘制这个,使用xticks使'ObstacleInterspace'(4个主要类别:0.0,0.5,0.75和1.70)是主要类别,和'性'(2类:'m'或'f' )作为一个子类别,'Sidestepped'(2类:1或0)是'Sex'的子类别?后一个子类别('Sidestepped')不得存在 . Sidestepped == 1 bar的图表就足够了 . 然后,每个类别的Sidestepped == 0的百分比将被隐含地清楚 .