按 5 年间隔对 Python 小提琴图进行分类

Categorizing Python violin plots by 5-year intervals

我有一个 DataFrame df:

year      count
1982      -10
1983      -3
1984      2
1984      12
1985      4
...
2007      3
2008      10
2009      -1
2009      0
2009      4

(数值随意编辑)

我正在尝试创建一个 x 轴为 year 且 y 轴为 count 的小提琴图,它通过以下方式执行:

fig, ax = plt.subplots(figsize=(13,10))

ax = sns.violinplot(x="year", y='count', ax=ax,
                    data=df, palette="muted", split=True)

ax.yaxis.grid(True)
ax.set_xlabel('Year')
ax.set_ylabel('Number')

plt.show()

这个returns:

如图所示,这很难解释,因为类别太多。我想将这些年分成 5 年的间隔。我试过类似的东西:

axes.violinplot(dataset = [df[df.year < 1990]["count"].values,
                           df[df.year > 1990 & df.year < 1996]["count"].values,
                           df[df.year > 1995 & df.year < 2001]["count"].values,
                           df[df.year > 2000 & df.year < 2006]["count"].values,
                           df[df.year > 2005]["count"].values])

但这returns是一个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

如何在我的小提琴图中将 year 数据分组为 5 年的间隔?

如果您根据多个条件从数据框中 select 行,则需要在每个条件两边加上括号:

dataset = [df[df.year < 1990]["count"].values,
                           df[(df.year > 1990) & (df.year < 1996)]["count"].values,
                           df[(df.year > 1995) & (df.year < 2001)]["count"].values,
                           df[(df.year > 2000) & (df.year < 2006)]["count"].values,
                           df[df.year > 2005]["count"].values]