我正在尝试使用 Python 中的 Matplotlib 绘制一些时间序列数据,但生成的图看起来很奇怪,我不明白为什么。这是我正在使用的代码:
filtered_df = df.loc[(df.index > '2010-01-01') & (df.index <= '2010-01-08')]
# Plotting the data fig, axs = plt.subplots(1, 1, figsize=(12, 5))
axs.plot(filtered_df.index, filtered_df['AEP_MW'])
axs.set_ylabel("Temp in Fahrenheit")
axs.set_xlabel("Date")
plt.show()
索引是一个时间序列,我希望该图显示指定日期范围内
AEP_MW
的值。但是,生成的图并不符合预期。
您可以在 Kaggle 上查看完整的笔记本 此处
我尝试过滤 DataFrame 以仅包含“2010-01-02”之间的日期和“2010-01-08”。
我验证了绘图设置和标签以确保它们与数据匹配。
代码中存在一些问题导致生成的绘图出现问题:
- 日期过滤器不正确: 正在使用字符串比较来过滤日期,这可能无法按预期工作。
- x 轴标签: 正在绘制时间序列数据,但将 x 轴标签设置为“日期”,这可能会产生误导。
以下是更正后的代码:
import pandas as pd
import matplotlib.pyplot as plt
# 将日期列转换为日期时间对象
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
# 使用正确的日期时间切片过滤数据
filtered_df = df['2010-01-02':'2010-01-08']
# 绘制数据
fig, axs = plt.subplots(1, 1, figsize=(12, 5))
axs.plot(filtered_df.index, filtered_df['AEP_MW'])
axs.set_ylabel("Temp in Fahrenheit")
axs.set_xlabel("Date")
plt.show()
解释:
- 将日期列转换为日期时间对象:
df['Date'] = pd.to_datetime(df['Date'])
此行将“日期”列转换为日期时间对象,这允许我们执行正确的日期时间切片。
- 将“日期”列设置为索引:
df = df.set_index('Date')
我们将“日期”列设置为数据帧的索引。这使我们能够使用基于日期时间的切片轻松选择数据子集。
- 使用正确的日期时间切片过滤数据:
filtered_df = df['2010-01-02':'2010-01-08']
此行使用基于切片的索引选择“2010-01-02”和“2010-01-08”之间的日期。在 pandas 中,当索引为日期时间类型时,
start_date:end_date
表示法会选择
start_date
和
end_date
之间的所有日期,包括边界。
通过进行这些更改,的代码现在应该会生成时间序列数据的正确绘图。
标签:python,matplotlib,datetime,time-series From: 78831091