【问题标题】:Seaborn violin plot using arrays - Error: Neither the `x` nor `y` variable appears to be numeric使用数组的 Seaborn 小提琴图 - 错误:“x”和“y”变量似乎都不是数字
【发布时间】:2020-02-23 02:30:04
【问题描述】:

我正在尝试使用 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:xy 变量似乎都不是数字。

现在我可能会很笨拙,只是将数组分隔成几行:

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]

产生我想要的情节:

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

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在 pandas 0.25 中,您可以使用 explode,对于以前的版本,请使用任何解决方案 here

      result = foo.explode('Values').reset_index(drop=True)
      result = result.assign(Names=result['Names'].astype('category'), 
                             Values=result['Values'].astype(np.float32))
      
      sns_plot = sns.violinplot(x='Names', y='Values', data=result)
      

      输出

      分解(或取消嵌套)会将您的数据转换为:

         Names     Values
      0    no0   3.352148
      1    no0   2.195788
      2    no0   1.234673
      3    no0   0.084360
      4    no0   1.778226
      ..   ...        ...
      95   no9  12.385434
      96   no9   9.849669
      97   no9  11.360196
      98   no9   8.535900
      99   no9   9.369197
      
      [100 rows x 2 columns]
      

      assign 将数据类型转换为:

      Names     category
      Values     float32
      dtype: object
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 2017-09-28
      • 2023-03-31
      • 2018-02-18
      • 2017-05-25
      • 2022-01-23
      • 2016-02-18
      相关资源
      最近更新 更多