2016-01-29 79 views
5

是否有將seaborn箱形圖沿着x軸放置在期望距離處?沿x軸在期望距離處的海豹箱形圖

我有一個數據幀與指標分配,馬克斯, 類型的學生姓名

+------------+----------+---------+----------+---------------+ 
| Type  | Homework | Quiz | Homework | Presentations | 
|   | max 100 | max 100 | max 100 | max 100  | 
+------------+----------+---------+----------+---------------+ 
| Assignment | 1  | 2  | 3  | 4    | 
+------------+----------+---------+----------+---------------+ 
| Student 1 | 88  | 98  | 100  | 85   | 
+------------+----------+---------+----------+---------------+ 
| Student 2 | 96  | 79  | 100  | 97   | 
+------------+----------+---------+----------+---------------+ 
| Student 3 | 87  | 79  | 72  | 78   | 
+------------+----------+---------+----------+---------------+ 
| Student 4 | 87  | 84  | 90  | 85   | 
+------------+----------+---------+----------+---------------+ 
| Student 5 | 73  | 91  | 76  | 90   | 
+------------+----------+---------+----------+---------------+ 
| Student 6 | 70  | 75  | 98  | 82   | 
+------------+----------+---------+----------+---------------+ 
| Student 7 | 85  | 71  | 73  | 75   | 
+------------+----------+---------+----------+---------------+ 
| Student 8 | 76  | 81  | 94  | 86   | 
+------------+----------+---------+----------+---------------+ 
| Student 9 | 97  | 80  | 95  | 88   | 
+------------+----------+---------+----------+---------------+ 

在現實中的分配是字符串,更具描述性的行索引 分層列索引。

我可以很容易地養活數據幀到seaborn,它會產生一個很好的箱形圖 sns.boxplot(DF)

我真正喜歡的是用於箱盒被分離到不同的副區(不硬),但要按時間順序進行適當間隔。

更清楚:

目前sns.boxplot(df)地方所有的箱形圖按時間順序這是很好的。 我想要一個在它上面的子圖,例如,只有測驗盒圖,但測驗盒圖在x軸上水平排列,如果包含所有任務,它們將落在那裏。

反正有在沿x軸的所需距離處放置海豹箱型圖

sns.boxplot(df['Quiz'], x=[1,5,9,12])由於您無法覆蓋x'值(但這些僅僅是標籤),因此不起作用。

回答

7
import numpy as np 
import pandas as pd 
import seaborn as sns 
df = pd.DataFrame(dict(x=np.repeat([0, 3, 5, 6], 10), 
         y=np.random.randn(40))) 
sns.boxplot(x="x", y="y", data=df, order=np.arange(7)) 

enter image description here

+2

哇,真棒;任何方式來處理'寬'的數據框? –

+1

這對於整數位置很酷,但對浮動位置不實用。任何建議如何實現? – jlarsch

2

簡短的回答是,seaborn.boxplot沒有指定沿x軸的箱形圖位置的選項。

如果您不太在意樣式或可以手動指定,則可以使用pandas.DataFrame.boxplot代替positions屬性。

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy.random as rnd # just to generate some data 

data = pd.DataFrame(rnd.randn(10,4)) 
data.boxplot(positions=[1,5,6,10]) 
plt.grid('off') 

boxplot with positions

UPDATE:看來,我錯了,因爲用戶mwaskom指出的那樣,你可以巧妙地利用order關鍵字指定位置,但似乎你需要從重塑你的數據'寬'到'長'格式。