2014-11-07 14 views
6

Tôi đang cố gắng để vẽ một series với thanh lỗi bất đối xứng sử dụng gấu trúc và matplotlib với đoạn mã sau:Tại sao gấu trúc áp dụng cùng một giá trị trên cả hai mặt của thanh lỗi không đối xứng?

d = {'high_delta': {1: 0.6, 
    2: 0.1, 
    3: 0.2, 
    4: 0.1, 
    5: 0.1, 
    6: 0.1, 
    7: 0.1, 
    8: 0.1, 
    9: 0.2, 
    10: 0.1}, 
'low_delta': {1: 0.2, 
    2: 0.1, 
    3: 0.1, 
    4: 0.1, 
    5: 0.1, 
    6: 0.1, 
    7: 0.1, 
    8: 0.1, 
    9: 0.1, 
    10: 0.4}, 
'p_hat': {1: 0.2, 
    2: 0.1, 
    3: 0.3, 
    4: 0.3, 
    5: 0.1, 
    6: 0.3, 
    7: 0.2, 
    8: 0.2, 
    9: 0.1, 
    10: 0.8}} 

df = pandas.DataFrame(d) 
df['p_hat'].plot(yerr=df[['low_delta', 'high_delta']].T.values) 
(df.p_hat + df.high_delta).plot(style='.') 
(df.p_hat - df.low_delta).plot(style='*') 

Các giới hạn thấp hơn luôn dường như để phù hợp với những gì tôi mong đợi, nhưng thay vì thêm giá trị trên trên ràng buộc nó có vẻ là thêm các giá trị từ các ràng buộc thấp hơn một lần nữa.

Lỗi nên được chuyển vào matplotlib sao cho các thanh lỗi được hiển thị chính xác?

+0

Bạn có thể viết lại bằng cách sử dụng gấu trúc không? – tacaswell

+0

Mọi thứ hoạt động tốt nếu tôi thay thế 'df ['p_hat']. Plot()' bằng 'plt.errorbar (df.index.values, df ['p_hat']. Giá trị, yerr = df [['low_delta', ' high_delta ']]. T.values) ', nhưng tôi muốn làm công việc này trong gấu trúc hoặc ít nhất là biết tại sao nó không. – 2daaa

+0

Tôi sẽ đưa vào một báo cáo lỗi với gấu trúc vì đây là lỗi trong gấu trúc – tacaswell

Trả lời

5

Câu trả lời ngắn: Sử dụng danh sách lỗi hình 1x2xN cho các thanh lỗi không đối xứng.

F.ex. trong ví dụ hiện nay sử dụng

errors = [ f.index.values, df['p_hat'].values ] 
df['p_hat'].plot(yerr=[errors]) 

hiện Có một lỗi trong Pandas mà kết quả trong gấu trúc để giải thích thanh lỗi được đưa ra trong hình dạng 2xN cho một loạt theo cùng một cách nó sẽ giải thích nhiều thanh lỗi cho nhiều hàng một DataFrame. Vì bạn rõ ràng là âm mưu chỉ có 1 hàng/dãy chỉ phần tử đầu tiên của danh sách các thanh lỗi được sử dụng và được hiểu là các lỗi đối xứng.

Cho đến khi bug được cố định trong gấu trúc, người ta có thể "lừa" gấu trúc bằng cách sử dụng các thanh lỗi không đối xứng bằng cách truyền các lỗi có dạng Mx2xN như hình dạng mong đợi cho các thanh lỗi không đối xứng trên DataFrames. Để chính xác, bạn phải sử dụng danh sách có hình dạng 1x2xN, có thể được tạo đơn giản bằng cách gọi f.ex. yerr=[ ... ]

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