pyplot图例与线条不匹配

2 投票
1 回答
4257 浏览
提问于 2025-04-19 07:13

我的图例颜色和线条颜色不一致。你们有没有什么建议,怎么解决这个问题,我哪里做错了?这段代码是从雅虎财经下载数据的,所以你可以直接在你的电脑上运行它,看到数据。谢谢你们的帮助!

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 个回答

1

你在调用 plt.plot 的时候已经给你的线条加上了标签,所以在调用 plt.legend 的时候就不需要再传入一堆标签了。换句话说,把

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

替换成

plt.legend(loc='upper left')

这样就可以正常工作了。

撰写回答