【问题标题】:non-categorical dataframe to categorical data for seaborn plotting boxplots, swarmplots, stripplots etc非分类数据框到分类数据的 seaborn 绘图箱线图、群图、条形图等
【发布时间】:2016-12-18 08:00:02
【问题描述】:

我对分类数据图感到困惑,这可能是因为我不太了解这个概念。

我有一个数据框:

      A         B         C
 0  1.438161 -0.210454 -1.983704
 1 -0.283780 -0.371773  0.017580
 2  0.552564 -0.610548  0.257276
 3  1.931332  0.649179 -1.349062
 4  1.656010 -1.373263  1.333079
 5  0.944862 -0.657849  1.526811

我可以使用 seaborn 轻松地将其绘制为每列的箱线图:

sns.boxplot(df)

但是 swarmplots、stripplots 不起作用,我猜是因为需要分类数据?

     value   indx       
   1.438161    A
  -0.283780    A
       ...
   0.552564    B
   1.931332    B
       ...
   1.656010    C
   0.944862    C

有没有一种我不知道的非常简单快捷的方法来做到这一点?

https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.swarmplot.html

【问题讨论】:

  • 好像需要参数数据sns.boxplot(data=df)
  • 好吧,其实就是解决问题了……谢谢。

标签: python pandas seaborn


【解决方案1】:

IIUC,您可以使用melt 将其中一个变量转换为分类格式,以帮助绘制swarmplotsstripplots

In [3]: df_sns = pd.melt(df, value_vars=['A', 'B', 'C'])

In [4]: df_sns
Out[4]: 
   variable     value
0         A  1.438161
1         A -0.283780
2         A  0.552564
3         A  1.931332
4         A  1.656010
5         A  0.944862
6         B -0.210454
7         B -0.371773
8         B -0.610548
9         B  0.649179
10        B -1.373263
11        B -0.657849
12        C -1.983704
13        C  0.017580
14        C  0.257276
15        C -1.349062
16        C  1.333079
17        C  1.526811

In [5]: sns.swarmplot(x='variable', y='value', data=df_sns)
Out[5]: <matplotlib.axes._subplots.AxesSubplot at 0x268db2a6e10>

【讨论】:

    【解决方案2】:

    我认为你需要参数data:

    sns.boxplot(data=df)
    

    Docs:

    data : DataFrame、数组或数组列表,可选

    用于绘图的数据集。如果 x 和 y 不存在,则将其解释为宽格式。否则它应该是长格式的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2018-12-05
      • 2019-09-05
      • 2023-03-28
      • 2018-06-17
      • 2021-12-31
      • 2021-10-07
      相关资源
      最近更新 更多