seaborn,如何按列进行绘制,而不会丢失数据

时间:2019-10-09 22:20:24

标签: python pandas dataframe matplotlib seaborn

我有一个数据帧,其键为'time_period','teamID','winrate'。

我正在尝试绘制每个时间段的teamID和赢率之间的关系。

我这样做是:

g = sns.catplot(x="teamID", y="winrate", kind="bar", col='time_period', 
col_wrap=1, data=df, height=5, aspect=2.5)

效果很好,但这是问题所在。每个时间段不一定包含相同的团队。但是,每个输出图仍将数据库中的每个团队用作X轴的标签。对于每个时期,我的情节在X轴上有一堆无杠的位置,因为这些团队在那个时期不存在。

有没有一种方法可以使每个时期的地块仅显示适用于该时期的球队?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为这不可能。 Catplot旨在比较各个类别的数据,因此显示差距是预期的行为。相反,您可以像这样进行常规子图绘制:

df = pd.DataFrame({'teamID': [1,2,3,2,3,4], 'time_period': [2018,2018,2018,2019,2019,2019], 'winrate': [.8, .7, .9, .85, .8, .95]})
f, ax = plt.subplots(1, len(grp))
grp = df.groupby('time_period')
for i,g in enumerate(grp):
    sns.barplot(g[1].teamID.to_list(), g[1].winrate.to_list(), ax=ax[i])
    ax[i].title.set_text(g[0])

enter image description here

请注意,相同的颜色对应于各个子图的不同团队,因此您可能需要添加color=sns.color_palette()[0],以将所有条形设置为相同的颜色。