创建使用百分比而不是计数的matplotlib或seaborn直方图?

Wil*_*yMe 5 python matplotlib dataset histogram pandas

具体来说,我正在处理Kaggle Titanic数据集。我绘制了一个堆积的直方图,显示了在泰坦尼克号上幸存和死亡的年龄。下面的代码。

figure = plt.figure(figsize=(15,8))
plt.hist([data[data['Survived']==1]['Age'], data[data['Survived']==0]['Age']], stacked=True, bins=30, label=['Survived','Dead'])
plt.xlabel('Age')
plt.ylabel('Number of passengers')
plt.legend()
Run Code Online (Sandbox Code Playgroud)

我想更改图表,以在每个年龄组中幸存的百分比显示一个图表。例如,如果垃圾箱包含10至20岁之间的年龄,并且该年龄段的泰坦尼克号上有60%的人幸存下来,那么高度将沿y轴对齐60%。

编辑:我可能对我要寻找的东西没有给出很好的解释。我希望不改变y轴的值,而是根据存活的百分比来更改条形的实际形状。

图中的第一个垃圾箱显示该年龄组中大约有65%的存活率。我希望此bin相对于y轴对齐65%。以下垃圾桶分别为90%,50%和10%,依此类推。

该图最终看起来实际上是这样的:

在此处输入图片说明

mir*_*iro 5

对于 Seaborn,请使用参数stat。根据文档,当前支持的stat参数值为:

  • count显示观察值的数量
  • frequency显示观测值数量除以箱宽度
  • density对计数进行归一化,使直方图的面积为 1
  • probability标准化计数,使条形高度之和为 1
  • percent标准化,使条形高度总和为 100

结果statcount

seaborn.histplot(
    data=data,
    x='variable',
    discrete=True,
    stat='count'
)
Run Code Online (Sandbox Code Playgroud)

stat=count 的直方图结果

stat修改后的结果为probability

seaborn.histplot(
    data=data,
    x='variable',
    discrete=True,
    stat='probability'
)
Run Code Online (Sandbox Code Playgroud)

stat=概率的直方图结果


小智 2

也许以下内容会有所帮助......

  1. 根据“幸存”拆分数据框

    df_survived=df[df['Survived']==1]
    df_not_survive=df[df['Survived']==0]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建垃圾箱

    age_bins=np.linspace(0,80,21)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用np.histogram生成直方图数据

    survived_hist=np.histogram(df_survived['Age'],bins=age_bins,range=(0,80))
    not_survive_hist=np.histogram(df_not_survive['Age'],bins=age_bins,range=(0,80))
    
    Run Code Online (Sandbox Code Playgroud)
  4. 计算每个箱中的存活率

    surv_rates=survived_hist[0]/(survived_hist[0]+not_survive_hist[0])
    
    Run Code Online (Sandbox Code Playgroud)
  5. 阴谋

    plt.bar(age_bins[:-1],surv_rates,width=age_bins[1]-age_bins[0])
    plt.xlabel('Age')
    plt.ylabel('Survival Rate')
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述