我正在尝试使用 seaborn 将多个 fiddle 图合而为一。数据框 我在一列中使用了几个分类值(用于 x 轴),每个分类值都有一个值数组(用于为每个分类值创建 fiddle 图)。一个小的工作示例是这样的:
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: Neither the
x
nory
variable appears to be numeric.
现在我可以变黑了,只需将数组分成几行:
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]
产生我想要的情节:
但我猜有一个更简单的解决方案,无需重构我的数据框。
最佳答案
pd.DataFrame.explode()
帮助您将列表列变成单独的单元格。将它们转换为实际数字而不是字符串后,sns.violinplot
可以毫不费力地绘制。
foo = foo.explode('Values')
foo['Values'] = foo['Values'].astype('float')
sns.violinplot(data=foo, x='Names', y='Values')
关于python - 使用数组的 Seaborn fiddle 图 - 错误 : Neither the `x` nor `y` variable appears to be numeric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580509/