如何用Matplotlib在同一子图绘制日期轴与对应整数索引轴
在Matplotlib子图中添加日期与整数索引双X轴
当然可以实现这个需求,通过Matplotlib的twiny()方法就能在同一子图中添加第二个X轴,一个绑定日期,另一个绑定数据的整数索引,同时绘制价格曲线。
以下是修改后的完整代码:
import yfinance as yf import matplotlib.pyplot as plt import numpy as np # 下载苹果股价数据 aapl = yf.download("AAPL", start="2022-01-01", end="2023-04-30") # 生成整数索引 idx = np.arange(len(aapl)) # 创建主坐标轴(绑定日期X轴) fig, ax = plt.subplots(figsize=(10,6)) # 绘制调整后收盘价,主X轴自动使用aapl的日期索引 ax.plot(aapl['Adj Close'], label='AAPL Adj Close') # 设置主坐标轴标签与标题 ax.set_xlabel('Date', fontsize=12) ax.set_ylabel('Price', fontsize=12) ax.set_title('AAPL Stock Price (Date + Index X-Axes)', fontsize=14) ax.legend() # 创建第二个X轴(绑定整数索引) ax2 = ax.twiny() # 让副轴的刻度范围与主轴数据点数量匹配 ax2.set_xlim(ax.get_xlim()) # 设置副轴的刻度位置和标签为整数索引 ax2.set_xticks(idx[::20]) # 每隔20个点显示一个索引,避免标签拥挤 ax2.set_xticklabels(idx[::20]) ax2.set_xlabel('Integer Index', fontsize=12) # 调整布局,避免标签重叠 plt.tight_layout() plt.show()
关键步骤说明
- 使用
ax.twiny()创建与主X轴共享Y轴的副X轴,两个轴独立控制X方向的刻度与标签 - 通过
ax2.set_xlim(ax.get_xlim())保证副轴的刻度范围和主轴完全对齐,确保索引和日期一一对应 - 用
idx[::20]间隔显示索引标签,防止过多标签导致重叠,可根据数据量调整间隔值
内容的提问来源于stack exchange,提问作者jonas
相关产品推荐
相关产品推荐

