2014-09-02 57 views
2

我的傳說與線條顏色不匹配。任何想法如何去解決這個問題,我做錯了什麼?該代碼從雅虎財務下載數據,因此您應該可以在計算機上按原樣運行數據並自行查看數據。謝謝你的幫助!pyplot傳說不符合線條

import pandas.io.data as web 
import datetime 
import pandas as pd 
import matplotlib.pyplot as plt 

start = '5/1/2007' 
end = '10/1/2007' 
event = datetime.date(2007,6,27) 
companies = ['AAPL','MSFT','BBRY','IBM'] 

all_data = {} 
for ticker in companies: 
     all_data[ticker] = web.get_data_yahoo(ticker, start,end) 

price = pd.DataFrame({tic:data['Adj Close'] 
        for tic, data in all_data.iteritems()}) 

volume = pd.DataFrame({tic:data['Volume'] 
        for tic, data in all_data.iteritems()}) 

rels = price/price.ix[event] 
plt.figure(figsize=(15,5)) 
for i in companies: 
    plt.plot(rels.index,rels[i],label=i,lw=4.0) 
plt.legend(companies,loc='upper left') 
plt.axvline(x=event) 
plt.grid(True) 
plt.show() 

編輯:我注意到,傳奇拿起axvline讓我感動的是傳說後產生的循環通過單獨情節語句作爲意見提出,但它仍然看起來像線不匹配圖例中的正確名稱。

回答

1

您在撥打電話plt.plot時已將您的電話打上了標籤,因此您不需要再撥打另一個標籤,即可撥打plt.legend。換句話說更換

plt.legend(companies,loc='upper left') 

plt.legend(loc='upper left') 

,事情應該很好地工作。

+0

謝謝!這工作。 – Chris 2014-09-02 15:44:55

2

我無法運行您的代碼,因爲我沒有熊貓,但我總是在plot內使用label。這可能需要你做一些事情(重構)是這樣的:

for i in _list_of_lines_you_want_to_plot: 
    plt.plot(xs_for_this_line,ys_for_this_line,label=YOURLABELHERE) 
plt.legend(loc='upper left') 
plt.grid(True) 
plt.show() 

至於爲什麼發生這種情況這是艱難的從代碼告訴,但它可能有一些做的事實,詞典訪問可以改變在程序的每次運行中,當從字典中繪製鍵時,請嘗試使用sorted,但這可能是錯誤的,我真的不知道。

+0

我試過了,我在圖例中得到了不同的顏色,但它們仍然不符合線條顏色。儘管如此,它仍然會派上用場! – Chris 2014-09-02 01:52:27