Python 如何使用Matplotlib或Seaborn从分组数据生成多个绘图?
我在pandas中有以下数据帧: 它根据数据集中参与者的年龄范围进行分组/索引。对于数据框中的每个年龄段,我想生成一个条形图,其条形图显示该特定年龄段的离婚率、结婚率等。如何使用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
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()
?