You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:37:08