2017-02-02 86 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

非常感謝!這正是我所期待的! –