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