如何为Matplotlib绘制的特定股票走势图添加图例?
解决方法
方法一:利用Pandas内置绘图(最简单)
直接取消注释你代码里的data['Close'].plot(),替换掉原生matplotlib的plt.plot,再添加图例即可。Pandas的plot方法会自动根据列名生成对应公司的图例:
from pandas_datareader import data as pdr import yfinance as yf import matplotlib.pyplot as plt yf.pdr_override() y_symbols = ['EA', 'TTWO', 'ATVI'] from datetime import datetime startdate = datetime(2000,1,1) enddate = datetime(2023,1,31) data = pdr.get_data_yahoo(y_symbols, start=startdate, end=enddate) plt.figure(figsize=(20,10)) # 使用Pandas的plot方法,自动生成公司对应图例 data['Close'].plot() plt.xlabel("Date") plt.ylabel("Price (in USD)") plt.title("Game Corporation Stock Price 1/1/00 - 1/1/23") # 显示图例 plt.legend() plt.show()
方法二:手动循环绘制(更灵活)
如果要保留原生matplotlib的plt.plot,可以循环遍历每个公司的收盘价列,明确指定label参数,最后调用plt.legend()显示图例:
from pandas_datareader import data as pdr import yfinance as yf import matplotlib.pyplot as plt yf.pdr_override() y_symbols = ['EA', 'TTWO', 'ATVI'] from datetime import datetime startdate = datetime(2000,1,1) enddate = datetime(2023,1,31) data = pdr.get_data_yahoo(y_symbols, start=startdate, end=enddate) plt.figure(figsize=(20,10)) # 循环每个公司,绘制走势并指定标签 for symbol in y_symbols: plt.plot(data.index, data['Close'][symbol], label=symbol) plt.xlabel("Date") plt.ylabel("Price (in USD)") plt.title("Game Corporation Stock Price 1/1/00 - 1/1/23") # 显示图例 plt.legend() plt.show()
原代码无图例的原因
你之前直接用plt.plot(data.index, data['Close'])时,matplotlib会一次性绘制所有列,但不会自动给每条线分配对应公司的标签,所以即使调用plt.legend()也无法显示正确的图例。上面两种方法都通过明确指定每条线的标签,让图例能正确关联各公司的走势。
内容的提问来源于stack exchange,提问作者Freya the Goddess
相关产品推荐
相关产品推荐

