2017-05-18 9 views
1

상자 플롯의 평균값을 연결하는 선을 플로팅하는 것은 간단한 일일 것 같지만 팬더에서이 플롯을 수행하는 방법을 알 수는 없습니다.파이썬 2.7과 판다 상자 플롯 중앙값을 연결

df.boxplot(column='Y_Data', by="Category", showfliers=True, showmeans=True) 

enter image description here

:

I는 상기 데이터 프레임의 외부 조작 할 필요없이 자동으로 X 장치 대 Y 용 박스 플롯을 생성하도록 박스 플롯을 구문을 사용하고

내가 한 가지 방법은 boxplot에서 평균값을 가져 와서 라인 플롯을 작성하는 것이지만 플롯에서 정보를 추출하는 방법을 모르겠습니다.

답변

1

df.boxplot()에서 반환 된 축 객체를 저장하고 동일한 축을 사용하여 선의 플롯으로 그려 볼 수 있습니다. Seaborn의 pointplot을 선으로 사용하는 것이 좋겠지 만 범주 형 x- 축을 멋지게 처리합니다.

import pandas as pd 
import numpy as np 
import seaborn as sns 

N = 150 
values = np.random.random(size=N) 
groups = np.random.choice(['A','B','C'], size=N) 
df = pd.DataFrame({'value':values, 'group':groups}) 

print(df.head()) 
    group  value 
0  A 0.816847 
1  A 0.468465 
2  C 0.871975 
3  B 0.933708 
4  A 0.480170 
       ... 

다음, 상자 그림을하고 축 개체를 저장 :

우선의 일부 샘플 데이터를 생성 할 수

ax = df.boxplot(column='value', by='group', showfliers=True, 
       positions=range(df.group.unique().shape[0])) 

참고 : Pyplot/팬더 boxplot()에 호기심 positions 인수가 있습니다있는 off-by-one 오류가 발생할 수 있습니다. this discussion에서 더 많은 내용을 참조하십시오.

마지막으로, 카테고리는 의미 얻을 groupby을 사용하고 상자 그림 위에 겹쳐 선 그림으로 평균 값을 연결합니다

sns.pointplot(x='group', y='value', data=df.groupby('group', as_index=False).mean(), ax=ax) 

boxplot

귀하의 제목은 있지만 이야기 "중간"언급 카테고리 란 귀하의 게시물에 있음을 의미합니다. 나는 여기서 의미를 사용했다. 중앙값을 플롯하려면 으로 groupby 집합을 변경하십시오.

+0

훌륭한 답변입니다. Seaborn 패키지를 사용하지는 않았지만이 작업을 수행해야하는 것은 논리적 인 선택 인 것 같습니다. 이미 모든 종속성이 있습니다. 감사! – Patratacus