2014-09-02 3 views
2

내 범례가 선 색과 일치하지 않습니다. 어떤 문제를 고치고 어떻게 잘못하고 있는지 생각해보십시오. 이 코드는 yahoo finance에서 데이터를 다운로드하므로 컴퓨터에서와 같이 실행하고 데이터를 직접 볼 수 있어야합니다. 당신의 도움을 주셔서 감사합니다!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(loc='upper left') 

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

을 교체하고 일이 잘 작동합니다.

+0

감사합니다. 이것은 효과가 있었다. – Chris

2

팬더가 없기 때문에 코드를 실행할 수 없지만 항상 labelplot 내에 사용합니다. 이것은 당신이이 같은 (리팩토링을) 할 필요가 있습니다

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