2017-01-10 4 views
4

このバイオリンプロットhttp://seaborn.pydata.org/generated/seaborn.violinplot.html(split = Trueの4番目の例)とこの1つのhttp://seaborn.pydata.org/examples/elaborate_violinplot.htmlを組み合わせたいと思います。Seaborn、1列に1つのデータを持つバイオリンプロット

実際には、Success(YesまたはNo)の列といくつかのデータ列を持つdataFrameがあります。例:

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

、それはまだいくつかの作業を必要とする:Aスケールが合うように大きさにしますシングルハーフバイオリン、例えば。

関連する問題