2017-01-10 28 views
4

我想将这个小提琴情节http://seaborn.pydata.org/generated/seaborn.violinplot.html(第四个例子与split = True)和这个http://seaborn.pydata.org/examples/elaborate_violinplot.html结合起来。Seaborn小提琴情节每列有一个数据

其实,我有一个数据帧与列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'错误。因此,我应该如何根据“成功”栏来划分小提琴情节?

回答

8

如果正确地理解你的问题,你需要重塑你的数据帧有它的长格式:

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

enter image description here

+0

这就是我一直在寻找。谢谢 – Ger

0

我能够在一个数据帧,以适应小提琴情节的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() 

Seaborn violin graph over Pandas DataFrame

显然,这还需要一些工作:一台秤的大小,以适应例如,单个半小提琴。