Python 如何使用Matplotlib或Seaborn从分组数据生成多个绘图?

Python 如何使用Matplotlib或Seaborn从分组数据生成多个绘图?,python,python-3.x,pandas,matplotlib,seaborn,Python,Python 3.x,Pandas,Matplotlib,Seaborn,我在pandas中有以下数据帧: 它根据数据集中参与者的年龄范围进行分组/索引。对于数据框中的每个年龄段,我想生成一个条形图,其条形图显示该特定年龄段的离婚率、结婚率等。如何使用matplotlib或seaborn实现这一点?提前感谢您提供的任何帮助 用于生成数据帧的代码: import numpy as np import pandas as pd import seaborn as sns from matplotlib import pyplot as plt plt.style.use

我在pandas中有以下数据帧:

它根据数据集中参与者的年龄范围进行分组/索引。对于数据框中的每个年龄段,我想生成一个条形图,其条形图显示该特定年龄段的离婚率、结婚率等。如何使用matplotlib或seaborn实现这一点?提前感谢您提供的任何帮助

用于生成数据帧的代码:

import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
plt.style.use('ggplot')

df = pd.DataFrame({
    'age_range': [(18, 28), (28, 38), (38, 48), (48, 58), (58, 68), (68, 78), (78, 88)],
    'divorced': [0.015837, 0.068826, 0.138132, 0.185022, 0.180258, 0.179211, 0.099502],
    'living with partner': [0.21040724, 0.14979757, 0.07392996, 0.06828194, 0.04506438, 0.01075269, 0.00995025],
    'married': [0.24208145, 0.51619433, 0.57198444, 0.54625551, 0.50429185, 0.37992832, 0.28855721],
    'never_married': [0.50904977, 0.23279352, 0.14202335, 0.08370044, 0.09012876,0.05734767, 0.05472637],
    'refused': [np.nan, np.nan, np.nan, np.nan, 0.00214592, np.nan, np.nan],
    'widowed': [np.nan, 0.00202429, 0.0155642 , 0.05506608, 0.12875536, 0.33691756, 0.53731343]
})

df.set_index('age_range', inplace=True)
df

由于这些百分比加起来往往等于1,因此堆叠条形图非常适合:

plt.style.use('ggplot')
ax = df.plot.bar(stacked=True)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
结果:

如果您不想要堆叠的条带,而是想要用色调将其切面,那么seaborn的这一点非常快:

g=(
df.stack()
.to_帧(“计数”)
.rename_轴(索引=[“年龄范围”,“状态])
.reset_index()
.pipe((sns.factorplot,“数据”),
x='年龄范围',y='计数',
色调为“状态”,种类为“条形”,
尺寸=3.5,纵横比=1.86)
)

或者,您可以按列刻面:

g=(
df.stack()
.to_帧(“计数”)
.rename_轴(索引=[“年龄范围”,“状态])
.reset_index()
.pipe((sns.factorplot,“数据”),
x='年龄范围',y='计数',
col='Status',kind='bar',
尺寸=3.5,宽高比=1.86,卷边角=2)
)

这很有可能。有很多方法可以做到这一点。您需要更具体地说明您想要哪种条形图(例如,镶嵌面、堆叠……)。您还应该将数据帧包含在可复制的可复制格式中。谢谢您的反馈。我用数据帧的代码以可复制的格式更新了帖子。我想把它切面。只需
df.plot.bar()