2017-02-02 11 views
1

私はボックスプロットをプロットしたいA、B、およびC Aは、次のコードスニペットボックスプロット

import pandas as pd 
import numpy as np 
data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C']) 
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C']) 
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C']) 

に示す基を有するデータの17セットを含む3つのデータフレームを有します enter image description here 下図に示すように、3つのグループを比較するために、私は

import seaborn as sns 
sns.boxplot(data1, groupby='A','B','C') 

を次のようにseaborn's box plotを使用してプロットを作成しようとしていますが、明らかにこれは動作しません。誰かが助けてくれますか?

+0

は理由がありますデータは3つのデータフレームに分割されますか? 3つの指標の違いは何ですか? – Parfait

+0

@Parfait 3つのデータフレームで分離する理由はありません。私はデータフレームで結合することができますが、私は列名を複製します。 3つの間に指標があります。それ以外のデータは異なる場所から来たので、私はそれらが異なっていることを私は知っています –

+0

場所は指標です! 'sns.boxplot'では、あなたは軸のためにそれが必要です。 – Parfait

答えて

2

の位置のようなインジケータを割り当てて、3つのデータセットを区別することを検討してください。そして、3つのすべてを連結し、1つの列、1つのレターカテゴリの列、および1つの場所列、すべての入力sns.boxplotに取得するために、データを溶かす:

import pandas as pd 
import numpy as np 
from matplotlib pyplot as plt 
import seaborn as sns 

data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C']).assign(Location=1) 
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C']).assign(Location=2) 
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C']).assign(Location=3) 

cdf = pd.concat([data1, data2, data3])  
mdf = pd.melt(cdf, id_vars=['Location'], var_name=['Letter']) 
print(mdf.head()) 

# Location Letter  value 
# 0   1  A 0.223565 
# 1   1  A 0.515797 
# 2   1  A 0.377588 
# 3   1  A 0.687614 
# 4   1  A 0.094116 

ax = sns.boxplot(x="Location", y="value", hue="Letter", data=mdf)  
plt.show() 

Histogram Output

+0

ありがとう!これはまさに私が探していたものです! –

関連する問題