2015-09-22 261 views
0

我很困惑这个熊猫/ Matplotlib行为:Python的大熊猫GROUPBY箱线重叠

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

series = pd.Series(np.arange(10)) 
classifier = lambda x: 'Odd' if x%2 else "Even" 
grouped = series.groupby(classifier) 

grouped.plot(kind='box') 
plt.show() 

Boxplots overlap

如何获得下一箱线彼此大熊猫风格即具有很好的语法? :)

(熊猫v 0.16.2,Matplotlib v 1.4.3。)

编辑: 我知道我可以做到这一点:

grouped = grouped.apply(pd.Series.to_frame) 

,但我会假设有一个更清洁的方式去做这个?

+0

是'seaborn'库的选项? –

+0

我更喜欢Matplotlib,因为我正在教授课程,我们没有碰过seaborn ... – HenriV

+0

seaborn的绘图是用matplotlib制作的,就像熊猫一样 –

回答

1

所以我一般建议是避免通过大熊猫有以下例外策划:

  1. 超快速“N”脏互动探索和检验
  2. 时间序列

任何时间,您将要使用seaborn或滚动您自己的matplotlib功能。由于您使用的是数据框,因此seaborn是您最好的选择,尽管标签数据支持非常快速地沿着matplotlib的管道向下。

我还会建议您继续并创建存储在其中的分类的数据框。

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn 
seaborn.set(style='ticks') 

df = pd.DataFrame(np.arange(10), columns=['val']) 
df['class'] = df['val'].apply(lambda x: 'Odd' if x%2 else "Even") 
seaborn.boxplot(x='class', y='val', data=df, width=0.5) 
seaborn.despine(offset=10, trim=True) 

enter image description here

+0

谢谢,看起来我必须开始使用海鸥。为了记录,在我的原始示例中,足以说出seaborn.boxplot(分组)。 – HenriV

+0

仔细检查你的例子绘制一个DataFrame,而我正在寻找一个很好地绘制一个SeriesGroupBy对象的解决方案。 – HenriV

+0

@HenriV因此我的代码示例上面的免责声明 –