Python:在一个figu中绘制所有的分类子集组合

2024-04-28 14:00:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想生成曲线图,显示不同组和子组的平均速率随时间的变化。我可以手工完成,创建每个分组,定义每个y值集,并手动调用每个绘图。问题是,对所有组/子组的组合都这样做是不切实际的。但我不知道如何概括这个过程。在

我的数据有一个year,几个分类变量和一个数字rate。它看起来像这样,但实际上有更多的分类变量:

df.head()
Out [33]:
   year gender   race state  rate
0  2015      F  White    AL  0.01
1  2013      F  White    NC  0.48
2  2013      F  White    IN  0.07
3  2013      M  White    NJ  0.95
4  2013      F  White    NY  0.09

我想覆盖各个组和子组:

how group averages change over time

有没有一种更优雅的方式来细分/自动生成这个/这些图形?在

^{2}$

Tags: 数据绘图定义rate速率过程时间分类
2条回答

使用字典,可以在各种条件下半自动打印。我省略了图形样式化部分代码,以集中于基本要素。在

# overall plot
df.groupby('year').rate.mean().plot(label='Overall', marker='o')

# a dictionary to store various labels(keys) and conditions(values).
# by editing/adding conditions, you can customise your plots.
conds = {}
conds['F'] = (df.gender == 'F')
conds['M'] = (df.gender == 'M')
conds['White F'] = (df.gender == 'F') & (df.race == 'White')

# plot for each condition
for key, value in conds.items():
    df.loc[value].groupby('year').rate.mean().plot(label=key, marker='o')
plt.legend()
plt.show()

我喜欢建立一个单一的数据帧形状和组织使用熊猫情节。在

white_f = gb_gender_race.xs(('F','White'), level=['gender','race']).rename('White F')
gender = gb_gender.unstack()
overall = gb_overall.rename('Overall')
df_chart = pd.concat([white_f, gender, overall], axis=1)
axes = df_chart.plot(marker = 'o')
axes.set_xlim(left=2012.5)
axes.set_title('Year vs. Average Rate', fontsize= 24)
axes.set_xlabel('Year', fontsize= 16)
axes.set_ylabel('Average Rate', fontsize= 16)
axes.legend(['Overall', 'F', 'M', 'White F'], fontsize=14, loc= 'best', frameon= True, edgecolor= 'black')

输出:

enter image description here

相关问题 更多 >