2017-01-29 1 views
3

나는 이것을 알아내는 데 가장 힘든 시간을 보냈습니다. 여러 개의 범주 필드가있는 데이터 프레임이 있고 각 히스토그램에 대상 변수 (수입)가 중첩 된 막대 그래프로 모두 그려야합니다. 팬더를 사용하여 히스토그램을 수행하고 모든 필드를 반복 할 수 있기를 바랬지 만 인종을 구상하고 소득을 오버레이하려고하면 전설에 아무 것도없고 소득에 스택을 얻을 수없는 것처럼 보일 수 있습니다. 다른. 다음은 팬더의 다중 히스토그램 오버레이가있는 데이터 프레임

exampledf = {'Race': ['Black', 'White', 'Asian', 'White', 
        'White', 'Asian', 'White', 'White', 
        'White', 'Black', 'White', 'Asian'], 
     'Income': ['>=50k', '>=50k', '>=50k', '>=50k', 
        '>=50k', '<50k', '<50k', '>=50k', 
        '>=50k', '>=50k', '<50k', '>=50k',], 
     'Gender': ['M', 'F', 'F', 'F', 
        'M', 'M', 'M', 'M', 
        'M', 'M', 'M', 'M']} 
exampledf =pd.DataFrame(exampledf) 
exampledf.groupby(['Income','Race']).size().plot(x=exampledf['Race'], kind='bar', color=['r','b'], logy=False, legend=True) 

답변

2

순수 팬더를 사용 제임스의 대답은 아마 당신이 찾고있는 것입니다,하지만 난 때문에 놀라운 단순성 DataFrames에서 시각화를 위해 altair에 의존하고 점점 더있었습니다.

방금 ​​차트에서 치수에 프레임 열을 지정하여 원하는 같은 것을 얻을 수 있습니다 : 와우 ​​

Chart(exampledf).mark_bar(
).encode(
    column='Race', 
    y='count(*)', 
    x='Income' 
) 

enter image description here

+0

:

from altair import Chart Chart(exampledf).mark_bar( ).encode( y='Race', x='count(*)', color='Income' ) 

enter image description here

또는 , 그 표정은 정말 깨끗합니다. – James

+0

예, 동의합니다. Altair는 기본적으로 Vega와 D3를 만든 동일한 그룹에서 온 Vega-lite에 대한 래퍼입니다. 그리고 그들은 Plots을 멋지게 보이게 만드는 데 아주 능숙합니다. – foglerit

2

당신이 plot를 호출하는 방법이 올바르지 않습니다 .. 내 내가 시도 최신 것은 유사한 샘플 dataframe입니다. 팬더를 사용하여 막대 그래프에 변수 x을 전달하지 마십시오. 인덱스는 x 축과 같이 자동으로 사용됩니다. 그러나 다중 색인이 있기 때문에 원하는 차트를 제공하지 못할 수도 있습니다.

경주와 소득에 대한 가로 막 대형 차트를 만들려면 인덱스 (행)로 레이스, 세로 열로 소득, 개수로 계산해야합니다. groupby을 원하지 않으면 데이터를 피벗하고자합니다. 이 경우 .pivot_table을 사용하려고합니다.

인덱스가 인종 (팬더 x 값은 .plot)이고 수입은 다른 열 (.plot의 y 값) 인 새 데이터 프레임을 만듭니다.

pt = exampledf[['Race','Income']].pivot_table(index='Race', columns='Income', 
               aggfunc=len, fill_value=0) 
# output of pt: 
# Income <50k >=50k 
# Race 
# Asian  1  2 
# Black  0  2 
# White  2  5 

# make the plot 
pt.plot.bar() 

다음은 IPython을 사용하는 이미지입니다. Jupyter Notebook을 사용하는 기본 설정이 더 좋습니다.

enter image description here

관련 문제