Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中创建按类别进行颜色编码的堆叠条形图_Python_Pandas_Matplotlib_Stacked Chart - Fatal编程技术网

如何在python中创建按类别进行颜色编码的堆叠条形图

如何在python中创建按类别进行颜色编码的堆叠条形图,python,pandas,matplotlib,stacked-chart,Python,Pandas,Matplotlib,Stacked Chart,我正在Kaggle上制作一个广受欢迎的泰坦尼克号数据集,我想制作一个条形图,显示幸存者和死者的性别数字。在x轴上,我想要性别(男/女)。我想把生还者和死者放在一起,并用彩色编码 这是我当前的代码,它为男性/幸存、男性/死亡、女性/幸存、女性/死亡的每个组合生成四个条: 将熊猫作为pd导入 将seaborn作为sns导入数据 df=sns.load_数据集('titanic').loc[:,['sex','surved']] df.groupby('sex').survived.value_cou

我正在Kaggle上制作一个广受欢迎的泰坦尼克号数据集,我想制作一个条形图,显示幸存者和死者的性别数字。在x轴上,我想要性别(男/女)。我想把生还者和死者放在一起,并用彩色编码

这是我当前的代码,它为男性/幸存、男性/死亡、女性/幸存、女性/死亡的每个组合生成四个条:

将熊猫作为pd导入
将seaborn作为sns导入数据
df=sns.load_数据集('titanic').loc[:,['sex','surved']]
df.groupby('sex').survived.value_counts().plot(kind='bar',color='C0','C1'],stacked=True)
电流输出

对于一些示例数据,我相信这就是您正在使用
matplotlib
查找的内容:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'Sex':['M','F','M','F','M','F','M','F','M','F','F','F','M','F','F','F'],
                   'Survived':['Y','Y','N','Y','N','Y','N','Y','Y','Y','Y','Y','Y','Y','N','N']})
grouped = df.groupby(['Sex','Survived'],as_index=False).agg(Count=pd.NamedAgg(column="Survived", aggfunc="count"))
fig, ax = plt.subplots()
ax.bar(grouped[grouped['Sex'] =='F']['Survived'], grouped[grouped['Sex']=='F']['Count'],label='F')
ax.bar(grouped[grouped['Sex'] =='M']['Survived'], grouped[grouped['Sex']=='M']['Count'],label='M',bottom=grouped[grouped['Sex']=='F']['Count'])
ax.set_ylabel("Number of passengers")
ax.set_xlabel("Survived status")
ax.set_title('Passengers by survivality and gender')
ax.legend()
plt.show()
这是输出:

  • 最简单的方法是使用重塑数据帧,然后指定
    kind='bar'
    stacked=True
    进行绘图。
    • 要记住的重要一点是将数据格式化为绘图API的正确格式
  • 使用
    pandas v1.2.4
    matplotlib v3.3.4
    matplotlib
    pandas
    作为依赖项导入)
import seaborn as sns#用于泰坦尼克号数据
作为pd进口熊猫
#加载两个必要的柱
df=sns.load_数据集('titanic').loc[:,['sex','surved']]
#创建透视表
dfp=df.pivot_表(index='sex',columns=['survived'],aggfunc=len)
#显示器(dfp)
幸存0.1
性
女81 233
男468 109
#绘制数据帧
dfp.plot(kind='bar',stacked=True,ylabel='Counts',xlabel='Gender',
title='生存状态按性别统计',rot=0)

  • 我不建议使用堆叠钢筋,因为区分和比较每个类别的值比较困难
dfp.plot(kind='bar',stacked=False,ylabel='Counts',xlabel='Gender',
title='生存状态按性别统计',rot=0)

对于这种精细的绘图,尤其是数据帧,我更喜欢使用plotly,因为输出更具交互性。我没有使用组操作,因为逻辑索引可以实现这一点

最后,由于堆叠直方图的性质,您只能表示死者,因为幸存者将是左侧区域。如果你想用不同的颜色来表达它们,请随时发表评论

希望它能解决你的问题

import plotly.graph_objects as go
import numpy as np
import seaborn as sns

df = sns.load_dataset('titanic').loc[:, ['sex', 'survived']]
male_df = df[df['sex'] == 'male']
female_df = df[df['sex'] == 'female']

fig = go.Figure(go.Histogram(
    x=df['sex'], bingroup=1, name='total number of male/female'
))
fig.add_trace(go.Histogram(
    x=male_df[male_df['survived'] == 0]['sex'], bingroup=1, name='number of deceased male'
))
fig.add_trace(go.Histogram(
    x=female_df[female_df['survived'] == 0]['sex'], bingroup=1, name='number of deceased female'
))
fig.update_layout(
    title='Passengers by survivality and gender',
    barmode='overlay',
    bargap=0.1
)
fig.show()