python - 使用数组的 Seaborn fiddle 图 - 错误 : Neither the `x` nor `y` variable appears to be numeric

标签 python pandas seaborn

我正在尝试使用 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 nor y 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]

产生我想要的情节:

enter image description here

但我猜有一个更简单的解决方案,无需重构我的数据框。

最佳答案

pd.DataFrame.explode()帮助您将列表列变成单独的单元格。将它们转换为实际数字而不是字符串后,sns.violinplot 可以毫不费力地绘制。

foo = foo.explode('Values')
foo['Values'] = foo['Values'].astype('float')
sns.violinplot(data=foo, x='Names', y='Values')

enter image description here

关于python - 使用数组的 Seaborn fiddle 图 - 错误 : Neither the `x` nor `y` variable appears to be numeric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580509/

相关文章:

python - 按百分位数绘制直方图

python - 将 seaborn 情节图例移动到不同的位置

python - 如何在Django中使用CreateView进行多个文件的上传?

python - 使用 lambda 编写一个 mutate 函数

python - 如何使用 python pandas 读取已经打开的 excel 表

python - 如何加速seaborn热图

python - 如何为 Dataframe 中的所有列绘制 Seaborn Distplots 矩阵

python - 如何在 Visual Studio Code 中修改 pylint 的变量命名约定

python numpy.savetxt 一个混合格式的矩阵

python - 处理 pandas 多重索引的策略