我正在尝试使用seaborn在同一张图中生成多个小提琴图。我使用的数据框中,一个列中包含多个分类值(用于X轴),每个分类值有一个数组(用于创建该分类值对应的小提琴图)。以下是一个可用的工作示例:
foo = pd.DataFrame(columns =['Names','Values'])
for i in range(10):
foo.loc[i] = ['no'+str(i),np.random.normal(i,2,10)]
但是当尝试执行该操作时
sns.violinplot(x='Names', y='Values', data=foo)
我得到以下错误:
ValueError:似乎没有数字变量x或y。
现在我可以通过将数组分解成几行来达到目的:
foo = pd.DataFrame(columns =['Names','Values'])
for i in range(3):
bar = np.random.normal(i,2,10)
for j,b in enumerate(bar):
foo.loc[i*10+j] = ['no'+str(i),b]
它会生成我想要的图形:
但我猜想,有一种更简单的解决方案,不需要重新组织我的数据框。