绘制x轴无法正确显示滚动平均值

时间:2018-09-05 05:51:57

标签: python pandas matplotlib

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

收盘价的基本图工作正常,但是一旦我在图中添加滚动均值,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()

有了this sample data set,我得到了这个数字:

Rolling Mean plot - broken x-axis

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

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

enter image description here

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

csv columns

1 个答案:

答案 0 :(得分:2)

您的移动平均值日期始于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))