2017-01-12 69 views
5

tôi đang cố gắng để tạo ra một biểu đồ xếp chồng lên nhau của các giá trị nhóm sử dụng mã này:xếp chồng histogram của các giá trị nhóm trong Pandas

titanic.groupby('Survived').Age.hist(stacked=True) 

Nhưng tôi nhận được histogram này mà không thanh xếp chồng lên nhau.

enter image description here

Làm thế nào tôi có thể nhận được thanh của biểu đồ xếp chồng lên nhau mà không cần phải sử dụng matplotlib trực tiếp hoặc lặp lại qua các nhóm?

Dataset sử dụng: https://www.udacity.com/api/nodes/5454512672/supplemental_media/titanic-datacsv/download

Trả lời

1

Cách tốt nhất mà Tôi tìm thấy cho đến nay là t o tạo ra một dataframe mới với các nhóm:

pd.DataFrame({'Non-Survivors': titanic.groupby('Survived').get_group(0).Age, 
       'Survivors': titanic.groupby('Survived').get_group(1).Age}) 
      .plot.hist(stacked=True) 

enter image description here

+0

này làm việc tuyệt vời cho tôi cảm ơn bạn. – Atlas7

3

giải pháp này sử dụng một âm mưu thanh thay vì một biểu đồ nhưng tôi nghĩ rằng nó mang lại cho bạn những gì bạn đang tìm kiếm.

titanic.groupby(['Survived', pd.cut(titanic['Age'], np.arange(0,100,10))])\ 
     .size()\ 
     .unstack(0)\ 
     .plot.bar(stacked=True) 

enter image description here

2

tôi xác định một chức năng tùy chỉnh đó thúc đẩy np.histogram
Cũng lưu ý rằng các nhóm biểu đồ được tính trong nhóm 'Survived'

def hist(x): 
    h, e = np.histogram(x.dropna(), range=(0, 80)) 
    e = e.astype(int) 
    return pd.Series(h, zip(e[:-1], e[1:])) 

kw = dict(stacked=True, width=1, rot=45) 
titanic.groupby('Survived').Age.apply(hist).unstack(0).plot.bar(**kw) 

enter image description here

Các vấn đề liên quan