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

问题描述

我有一个 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()

返回:

enter image description here

如图所示,这很难解释,因为类别太多。我想将年份分组为 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])

但这会返回错误

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

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

解决方法

如果您根据多个条件从数据框中选择行,则需要在每个条件周围加上括号:

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]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...