You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

图表无法显示正确日期求助:多只股票开盘价绘图异常

解决股票开盘价图表日期格式异常的问题

嘿,我看到你在绘制DMART、SRTRANSFIN、INFY三只股票开盘价时,遇到了日期显示混乱的问题,这确实是matplotlib处理短时间序列时常见的小坑,咱们一步步来搞定它:

问题根源

从你提供的图表来看,日期轴显示得乱糟糟的,主要原因有两个:

  • matplotlib默认的日期刻度逻辑对仅4个交易日的短时间范围适配不好,会自动生成多余刻度或者格式混乱的标签
  • 虽然nsepy返回的DataFrame索引是datetime类型,但直接调用plot()方法时,matplotlib没有针对性地处理日期显示规则

修正后的代码

我给你调整了代码,手动控制日期的显示格式和刻度,确保每个交易日都清晰展示:

import matplotlib.pyplot as plt
from datetime import date
from nsepy import get_history
import matplotlib.dates as mdates

# 获取三只股票的历史数据
avenue_df = get_history(symbol='DMART', start=date(2018,5,6), end=date(2018,5,10))
shriram_df = get_history(symbol='SRTRANSFIN', start=date(2018,5,6), end=date(2018,5,10))
infy_df = get_history(symbol='INFY', start=date(2018,5,6), end=date(2018,5,10))

# 创建绘图对象,方便自定义坐标轴设置
fig, ax = plt.subplots()

# 把三条线都画到同一个坐标轴上
avenue_df.Open.plot(ax=ax, color='green', label='DMART')
shriram_df.Open.plot(ax=ax, color='red', label='SHRI')
infy_df.Open.plot(ax=ax, color='blue', label='INFY')

# 设置日期显示格式,这里用月-日的形式,你也可以改成%Y-%m-%d显示完整年份
date_formatter = mdates.DateFormatter('%m-%d')
ax.xaxis.set_major_formatter(date_formatter)

# 让每个交易日都显示一个刻度,避免出现空的非交易日刻度
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))

# 旋转日期标签45度,防止它们挤在一起
plt.xticks(rotation=45)

# 添加图例,位置保持你原来的左上角
plt.legend(loc='upper left')

# 自动调整布局,防止日期标签被图表边缘截断
plt.tight_layout()

# 显示图表
plt.show()

关键调整说明

  • 引入matplotlib.dates模块:这个模块专门用来处理matplotlib里的日期格式化和刻度控制,是解决这类问题的核心
  • subplots()创建绘图对象:这样能直接操作坐标轴ax,比默认的plot方法更灵活
  • 自定义日期格式和刻度:通过DateFormatter指定显示样式,DayLocator确保每个交易日都有刻度,不会出现多余的非交易日标记
  • 旋转标签+调整布局:这两步是为了让日期标签显示得更美观,不会重叠或者被截断

这样修改后,你的图表日期轴就会清晰显示每个交易日的日期,格式完全符合预期啦!

内容的提问来源于stack exchange,提问作者Vedant Joshi

火山引擎 最新活动