2014-04-17 17 views
6

tôi có thể vẽ thanh lỗi trên barplots loạt duy nhất như vậy:Vẽ thanh lỗi trên barplots với nhiều loạt trong gấu trúc

import pandas as pd 
df = pd.DataFrame([[4,6,1,3], [5,7,5,2]], columns = ['mean1', 'mean2', 'std1', 'std2'], index=['A', 'B']) 
print(df) 
    mean1 mean2 std1 std2 
A  4  6  1  3 
B  5  7  5  2 

df['mean1'].plot(kind='bar', yerr=df['std1'], alpha = 0.5,error_kw=dict(ecolor='k')) 

enter image description here

Đúng như dự đoán, giá trị trung bình của chỉ số A được kết hợp với tiêu chuẩn độ lệch của cùng một chỉ mục và thanh lỗi hiển thị +/- của giá trị này.

Tuy nhiên, khi tôi cố gắng vẽ cả 'mean1' và 'mean2' trong cốt truyện cùng tôi không thể sử dụng độ lệch chuẩn trong cùng một cách:

df[['mean1', 'mean2']].plot(kind='bar', yerr=df[['std1', 'std2']], alpha = 0.5,error_kw=dict(ecolor='k')) 

    Traceback (most recent call last): 

    File "<ipython-input-587-23614d88a3c5>", line 1, in <module> 
    df[['mean1', 'mean2']].plot(kind='bar', yerr=df[['std1', 'std2']], alpha = 0.5,error_kw=dict(ecolor='k')) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", line 1705, in plot_frame 
    plot_obj.generate() 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", line 878, in generate 
    self._make_plot() 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", line 1534, in _make_plot 
    start=start, label=label, **kwds) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\tools\plotting.py", line 1481, in f 
    return ax.bar(x, y, w, bottom=start,log=self.log, **kwds) 

    File "C:\Users\nameDropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\matplotlib\axes.py", line 5075, in bar 
    fmt=None, **error_kw) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\matplotlib\axes.py", line 5749, in errorbar 
    iterable(yerr[0]) and iterable(yerr[1])): 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\core\frame.py", line 1635, in __getitem__ 
    return self._getitem_column(key) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\core\frame.py", line 1642, in _getitem_column 
    return self._get_item_cache(key) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\core\generic.py", line 983, in _get_item_cache 
    values = self._data.get(item) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\core\internals.py", line 2754, in get 
    _, block = self._find_block(item) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\core\internals.py", line 3065, in _find_block 
    self._check_have(item) 

    File "C:\Users\name\Dropbox\Tools\WinPython-64bit-2.7.6.2\python-2.7.6.amd64\lib\site-packages\pandas\core\internals.py", line 3072, in _check_have 
    raise KeyError('no item named %s' % com.pprint_thing(item)) 

KeyError: u'no item named 0' 

Gần nhất tôi đã nhận được đầu ra mong muốn của tôi là thế này:

df[['mean1', 'mean2']].plot(kind='bar', yerr=df[['std1', 'std2']].values.T, alpha = 0.5,error_kw=dict(ecolor='k')) 

enter image description here

Nhưng bây giờ các quán bar lỗi không vẽ đối xứng. Thay vào đó, các thanh màu xanh lá cây và mờ trong mỗi chuỗi sử dụng cùng một lỗi tích cực và tiêu cực và đây là nơi tôi bị kẹt. Làm thế nào tôi có thể nhận được các thanh lỗi của barplot multiseries của tôi để có một sự xuất hiện tương tự như khi tôi chỉ có một loạt?

Cập nhật: Có vẻ như điều này được sửa trong pandas 0.14, tôi đã đọc tài liệu cho 0.13 trước đó. Tôi không có khả năng nâng cấp gấu trúc của tôi ngay bây giờ. Sẽ làm sau và xem nó như thế nào.

+0

bạn đã bao giờ tìm ra điều này chưa? – pocketfullofcheese

+0

Tôi vẫn chưa thử trong 0,14. Tôi đã kết thúc việc sử dụng matplotlib trực tiếp cho trường hợp cụ thể này. –

Trả lời

6

Roger rằng Ajean và Alios!

Tôi cuối cùng đã tìm được câu trả lời cho câu hỏi. Đây là điều tôi đã cố gắng làm trong nhiều ngày nay. Vấn đề dường như là một vấn đề trong phiên bản trước của Pandas. Tôi đã cài đặt Pandas 0.15.0 và bây giờ bạn có thể tham khảo một khung dữ liệu khác và sử dụng dữ liệu cho các thanh lỗi trên các ô thanh được nhóm lại như Ceflo đang cố gắng làm ở trên. Vì vậy, các mã sau đây bây giờ làm việc trong Pandas 0.15.0.

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.DataFrame([[4,6,1,3], [5,7,5,2]], columns = ['mean1', 'mean2', 'std1', 'std2'], index=['A', 'B']) 
print(df) 

df[['mean1', 'mean2']].plot(kind='bar', yerr=df[['std1', 'std2']].values.T, alpha = 0.5,error_kw=dict(ecolor='k')) 
plt.show() 
+1

Tốt để biết điều này hoạt động. Trong bản cập nhật trong câu hỏi của tôi, tôi lưu ý rằng điều này dường như được cố định từ gấu trúc 0,14 ngày. Nhưng tôi không có khả năng để cập nhật gấu trúc của tôi trở lại sau đó và sau đó tôi quên nó =) –

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