pyplot图例不匹配线条

时间:2014-09-02 01:03:32

标签: python matplotlib

我的传奇与线条颜色不匹配。知道我如何解决这个问题以及我做错了什么?代码从yahoo finance下载数据,因此您应该可以在计算机上运行它并自己查看数据。谢谢你的帮助!

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,所以我把它移到了图例之后,并按照评论中的建议通过循环生成了单独的绘图语句,但它看起来仍然看起来像是没有匹配正确的传奇中的名字。

2 个答案:

答案 0 :(得分:2)

我无法运行您的代码,因为我没有大熊猫,但我总是在label内使用plot。这可能需要你做这样的事情(重构):

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来自字典的密钥,但这可能是错的,我真的不知道。

答案 1 :(得分:1)

您已通过拨打plt.plot来标记自己的线路,因此您无需在拨打plt.legend电话时传递另一批标签。换句话说,替换

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

plt.legend(loc='upper left')

并且事情应该正常。