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

如何在Matplotlib中以datetime64[ns]类型的DataFrame列为X轴绘制时间序列

修正Matplotlib绘制双时间序列的问题

嘿,我帮你梳理下代码里的问题,以及怎么调整来实现同一张图里画Open和Close两个时间序列~

你的代码里的几个关键问题:

  • 导入错误:你导入的是matplotlib整个库,但绘图需要用它的pyplot子模块,直接用matplotlib调用xticks、plot这些方法会报错。
  • X轴未正确指定:你想把Date列作为X轴,但代码里既没把它传给plot函数,还写错了列名(你写的df['Index']应该是笔误,实际是Date列对吧?)。默认情况下,plt.plot(df['Close'])会用DataFrame的默认索引当X轴,而不是你需要的日期。
  • 日期刻度可读性差:就算你指定了Date列,直接把所有日期塞给xticks会导致刻度重叠,根本看不清。

修正后的完整代码

import matplotlib.pyplot as plt
import pandas as pd

# 假设你的DataFrame已经加载完成,且Date列是datetime64[ns]类型
# 方法1:将Date设为索引(推荐,绘图更简洁)
df.set_index('Date', inplace=True)

# 绘制两条时间序列,同时添加标签方便区分
plt.plot(df.index, df['Close'], label='Close Price')
plt.plot(df.index, df['Open'], label='Open Price')

# 处理日期刻度:自动旋转避免重叠,设置清晰的日期格式
plt.gcf().autofmt_xdate()
date_formatter = plt.matplotlib.dates.DateFormatter('%Y-%m-%d')
plt.gca().xaxis.set_major_formatter(date_formatter)

# 添加图表元素,提升可读性
plt.legend()
plt.title('Daily Open vs Close Prices')
plt.xlabel('Date')
plt.ylabel('Price')

plt.show()

如果不想把Date设为索引,也可以直接在plot里指定X轴:

# 方法2:不修改索引,直接指定x参数
plt.plot(df['Date'], df['Close'], label='Close Price')
plt.plot(df['Date'], df['Open'], label='Open Price')

# 后面的日期格式化、图表元素设置和上面一样
plt.gcf().autofmt_xdate()
date_formatter = plt.matplotlib.dates.DateFormatter('%Y-%m-%d')
plt.gca().xaxis.set_major_formatter(date_formatter)

plt.legend()
plt.title('Daily Open vs Close Prices')
plt.xlabel('Date')
plt.ylabel('Price')

plt.show()

关键改进点说明:

  1. 修正导入语句为import matplotlib.pyplot as plt,这是Matplotlib绘图的标准导入方式。
  2. 明确指定X轴为Date列(无论是设为索引还是直接传入x参数),确保时间序列的X轴是你需要的日期。
  3. 添加label参数并调用plt.legend(),让两条线有明确的标识。
  4. 用autofmt_xdate()和DateFormatter处理日期刻度,解决重叠问题,让日期显示更清晰。
  5. 补充标题、坐标轴标签,让图表信息更完整。

内容的提问来源于stack exchange,提问作者chetan buye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:07:08