2016-12-24 1 views
2

당 플롯 여러 줄, 부가 적 줄거리에 여러 라인을 그릴 수있는 파이썬 방법은 무엇입니까? 두 열 인덱스, 날짜 및 과일, 열 및 수량 값 저장을위한 팬더 데이터 프레임이 있습니다. 나는 각각의 과일에 그것의 자신의 색깔 선으로 x 축과 수량으로 y 축으로 datestring과 더불어, 각 가게를 위해 하나씩 5 개의 subplot을 원한다. 이 과일에 의해 음모를 꾸미고보다 모두 오히려 수량을 집계 제외하기 matplotlib : 줄거리를 사용하여 시계열 부가 적 줄거리

df.plot(subplots=True) 

거의, 줄거리의 오른쪽 양, 나는 생각이 저를 가져옵니다.

enter image description here

답변

3

설정
은 항상 당신의 문제를 재현 샘플 데이터를 제공합니다.
좀 여기

cols = pd.Index(['TJ', 'WH', 'SAFE', 'Walmart', 'Generic'], name='Store') 
dates = ['2015-10-23', '2015-10-24'] 
fruit = ['carrots', 'pears', 'mangos', 'banannas', 
     'melons', 'strawberries', 'blueberries', 'blackberries'] 
rows = pd.MultiIndex.from_product([dates, fruit], names=['datestring', 'fruit']) 
df = pd.DataFrame(np.random.randint(50, size=(16, 5)), rows, cols) 
df 

enter image description here

우선 제공 한, 당신은 이제 우리는 우리가 플롯 할 수 있음을 알 수 pd.to_datetime

df.index.set_levels(pd.to_datetime(df.index.levels[0]), 0, inplace=True) 

와 행 인덱스의 첫 번째 레벨을 변환 할 직관적으로

# fill_value is unnecessary with the sample data, but should be there 
df.TJ.unstack(fill_value=0).plot() 

enter image description here

우리는 당신을 감사 @piRSqaured

fig, axes = plt.subplots(5, 1, figsize=(12, 8)) 

for i, (j, col) in enumerate(df.iteritems()): 
    ax = axes[i] 
    col = col.rename_axis([None, None]) 
    col.unstack(fill_value=0).plot(ax=ax, title=j, legend=False) 

    if i == 0: 
     ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left', ncol=1) 

fig.tight_layout() 

enter image description here

+0

로 모든 플롯 할 수 있습니다. 매우 도움이되는 대답; matplotlib가 지금 어떻게 작동하는지 더 잘 이해할 수 있습니다. –