首页 > 解决方案 > 绘制滚动平均值的 x 轴未正确显示

问题描述

显然,在我的图形中添加滚动均值图时,我犯了一个非常基本的错误。

收盘价的基本图工作正常,但只要我将滚动平均值添加到图中,x 轴日期就会搞砸,我看不出它在做什么。

这是代码:

import pandas as pd
import matplotlib.pyplot as plot

df = pd.read_csv('historical_price_data.csv')
df['Date'] = pd.to_datetime(df.Date, infer_datetime_format=True) 
df.sort_index(inplace=True)

ax = df[['Date', 'Close']].plot(figsize=(14, 7), x='Date', color='black')

rolling_mean = df.Close.rolling(window=7).mean()
plot.plot(rolling_mean, color='blue', label='Rolling Mean')

plot.show()

有了这个样本数据集,我得到了这个数字:

滚动平均图 - 断开的 x 轴

鉴于此代码的简单性,我显然犯了一个非常基本的错误,我只是看不出它是什么。

编辑:有趣的是,虽然@AndreyPortnoy 将索引设置为 Date 的建议会导致 Date 不在索引中的奇怪错误,但当我按照他的建议使用内置时,这个数字不再是一团糟,但对于某些人来说原因 x 轴反转,刻度不再是日期,但显然是整数(?)即使 df.types 显示 Date is datetime64[ns]

在此处输入图像描述

@Sandipan\ Dey:这是数据集的样子。根据上面的代码,我使用 pd.to_datetime() 转换为 datetime64,并尝试 df[::-1] 解决当第二个图 (mov_avg) 添加到图中时它被反转的问题(但不是当图形只有 1 个情节时反转。)

csv 列

标签: pythonpandasmatplotlib

解决方案


移动平均线的日期从 1970 年开始这一事实表明使用了整数范围指数。它是在您读取 csv 文件时默认生成的。尝试插入

df.set_index('Date', inplace=True)

df.sort_index(inplace=True)

然后你可以做

ax = df['Close'].plot(figsize=(14, 7), color='black')
rolling_mean = df.Close.rolling(window=7).mean()
plot.plot(rolling_mean, color='blue', label='Rolling Mean')

请注意,我没有x明确地传递、让pandasmatplotlib推断它。

您可以使用内置的绘图工具来简化代码,如下所示:

df['mov_avg'] = df['Close'].rolling(window=7).mean()
df[['Close', 'mov_avg']].plot(figsize=(14, 7))

推荐阅读