2012-07-05 95 views
18

我有一隻熊貓DataFrame,我想繪製一個包含圖例的條形圖。熊貓酒吧情節與特定的顏色和傳說的位置?

import pylab as pl 
from pandas import * 

x = DataFrame({"Alpha": Series({1: 1, 2: 3, 3:2.5}), "Beta": Series({1: 2, 2: 2, 3:3.5})}) 

如果我直接打電話的情節,然後它把上述陰謀的傳說:

x.plot(kind="bar") 

如果我在小區轉了傳奇,並嘗試添加它,那麼它不保留在數據幀的兩列相關的顏色(見下文):

x.plot(kind="bar", legend=False) 
l = pl.legend(('Alpha','Beta'), loc='best') 

什麼是包括從大熊貓數據幀一matplotlib情節傳奇的正確方法? enter image description here

+0

我得到相同的顏色兩次。 – eumiro 2012-07-05 16:42:53

+0

我使用Python 2.6.6,IPython 0.10.1和Pandas 0.7.0.dev-2546ac7。 @eumiro:兩種版本都有兩種不同的顏色?我的第二個命令顯示爲相同的顏色。 – Shane 2012-07-05 17:51:19

+0

Python2.7,Pandas 0.7.0。兩種方法都會返回相同的紅綠條形圖,並帶有相同的紅綠圖例。不像截圖中的紅色紅色圖例。對不起,不知道。 – eumiro 2012-07-05 19:51:32

回答

24

如果你想手動添加的傳說,你要問的次要情節的柱狀圖中的元素:

In [17]: ax = x.plot(kind='bar', legend=False) 

In [18]: patches, labels = ax.get_legend_handles_labels() 

In [19]: ax.legend(patches, labels, loc='best') 
Out[19]: <matplotlib.legend.Legend at 0x10b292ad0> 

此外,plt.legend(loc='best')ax.legend(loc='best')應該「只是工作」,因爲有已經「鏈接」到繪圖時設置的條形圖補丁,因此您不必傳遞軸標籤列表。

我不確定您使用的熊貓版本是否返回了該子圖的句柄(ax = ...),但我相當確定0.7.3的版本。您始終可以通過plt.gca()獲得相關信息。

+3

這是工作,謝謝!能夠在調用x.plot()時直接指定圖例位置將會很好。 – Shane 2012-07-09 13:12:07

+0

此外,是否有任何方法來指定屬性像'顏色='#336699',alpha = 0.5'在DataFrame陰謀的多個酒吧? – Shane 2012-07-09 13:13:35

21

最簡潔的方式去爲:

x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5)) 

或一般

x.plot(kind="bar").legend(*args, **kwargs)