如何使用Yahoo Query绘制AAPL与NFLX的历史行情双系列图表?
问题与解决方案
问题
- 请问在yahooquery的历史行情文档中,绘制历史行情图表的命令是什么?
- 尝试以下代码后,图表仅显示一个数据系列,如何在同一张图表上生成AAPL和NFLX两个数据系列?
import pandas as pd import matplotlib.pyplot as plt from yahooquery import Ticker tickers = Ticker('aapl nflx', asynchronous=True) df = tickers.history() df["adjclose"].plot() plt.xticks(rotation=90) plt.show()
解决方案
核心原因
tickers.history()返回的是**多层索引(MultiIndex)**的DataFrame,索引层级依次为ticker和date。直接调用df["adjclose"].plot()会将两个股票的收盘价数据合并成一个系列展示,而非分开的两条曲线。
修改后的代码
你可以通过unstack方法将ticker索引转换为列,这样就能在同一张图中展示两个股票的行情:
import pandas as pd import matplotlib.pyplot as plt from yahooquery import Ticker tickers = Ticker('aapl nflx', asynchronous=True) df = tickers.history() # 将ticker索引转为列,拆分adjclose为不同股票的列 df_unstacked = df["adjclose"].unstack(level=0) # 绘制双系列图表 df_unstacked.plot() plt.xticks(rotation=90) plt.title('AAPL vs NFLX Adjusted Close Price') plt.ylabel('Price') plt.show()
或者也可以使用xs方法分别提取单个股票的数据后手动绘图:
import pandas as pd import matplotlib.pyplot as plt from yahooquery import Ticker tickers = Ticker('aapl nflx', asynchronous=True) df = tickers.history() # 提取AAPL和NFLX的adjclose数据 aapl_adjclose = df.xs('aapl', level='ticker')['adjclose'] nflx_adjclose = df.xs('nflx', level='ticker')['adjclose'] # 分别绘图 aapl_adjclose.plot(label='AAPL') nflx_adjclose.plot(label='NFLX') plt.xticks(rotation=90) plt.title('AAPL vs NFLX Adjusted Close Price') plt.ylabel('Price') plt.legend() plt.show()
关于绘制历史行情图表的命令
文档中绘制历史行情图表的核心方式就是利用pandas的plot()方法结合matplotlib展示,本质是对返回的DataFrame进行可视化,关键在于根据DataFrame的多层索引结构做对应的数据整理后再调用绘图方法。
内容的提问来源于stack exchange,提问作者Paul Harris
相关产品推荐
相关产品推荐

