【问题标题】:Seaborn, violin plot with one data per columnSeaborn,小提琴图,每列一个数据
【发布时间】:2017-05-25 04:55:51
【问题描述】:

我想将这个小提琴情节http://seaborn.pydata.org/generated/seaborn.violinplot.html(第四个使用 split=True 的例子)与这个http://seaborn.pydata.org/examples/elaborate_violinplot.html 结合起来。

实际上,我有一个带有 Success 列(是或否)和几个数据列的数据框。例如:

df = pd.DataFrame(
    {"Success": 50 * ["Yes"] + 50 * ["No"], 
     "A": np.random.randint(1, 7, 100), 
     "B": np.random.randint(1, 7, 100)}
)

    A  B Success
0   6  4     Yes
1   6  2     Yes
2   1  1     Yes
3   1  2     Yes
.. .. ..     ...
95  4  4      No
96  2  1      No
97  2  6      No
98  2  3      No
99  2  1      No

我想为每个数据列绘制小提琴图。它适用于:

import seaborn as sns
sns.violinplot(data=df[["A", "B"]], inner="quartile", bw=.15)

但现在,我想根据Success 列拆分小提琴。但是,使用hue="Success" 我得到了Cannot use 'hue' without 'x' or 'y' 的错误。因此,如何通过根据“成功”列拆分来绘制小提琴图?

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    我能够像这样在 DataFrame 上调整小提琴图的example

    df = pd.DataFrame({"Success": 50 * ["Yes"] + 50 * ["No"], 
                       "A": np.random.randint(1, 7, 100), 
                       "B": np.random.randint(1, 7, 100)})
    sns.violinplot(df.A, df.B, df.Success, inner="quartile", split=True)
    sns.plt.show()
    

    显然,它仍然需要做一些工作:例如,A 音阶的大小应该适合单个半小提琴。

    【讨论】:

      【解决方案2】:

      如果正确理解您的问题,您需要重塑您的数据框以使其具有长格式:

      df = pd.melt(df, value_vars=['A', 'B'], id_vars='Success')
      sns.violinplot(x='variable', y='value', hue='Success', data=df)
      plt.show()
      

      【讨论】:

      • 这就是我想要的。谢谢
      • 它似乎不再工作了——我的意思是运行这段代码不会产生这个图像,而是 4 个小提琴图
      猜你喜欢
      • 2023-03-31
      • 2018-02-18
      • 2021-08-29
      • 2021-10-14
      • 2018-01-15
      • 2020-07-03
      • 2021-02-23
      • 2019-03-14
      • 2016-03-10
      相关资源
      最近更新 更多