2017-02-02 53 views
1

我已经包含17组数据用每组三个dataframes在下面的代码段中所示A,B,和C.甲箱线图

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']) 

我想绘制箱形图比较三组如图下图 enter image description here 我试图让使用seaborn's box plot情节如下

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

,但显然这是行不通的。有人可以帮忙吗?

+0

是否有一个原因数据分成三个数据帧?三者之间的指标有什么不同? – Parfait

+0

@Parfait没有理由在三个数据框中分开。我可以在数据框中合并,但是我会重复列名。三者之间有指标。除此之外,我知道他们是不同的,因为数据来自不同的位置 –

+0

位置是指标!在'sns.boxplot'中,你需要这些轴​​。 – Parfait

回答

2

考虑分配一个指标,如位置来区分你的三组数据。然后串联三个和熔体中的数据检索一个列,一个类别列,和一个位置列,全部投入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

非常感谢!这正是我所期待的! –