在为我的图形添加滚动均值图时,我显然犯了一个非常基本的错误。
收盘价的基本图工作正常,但是一旦我在图中添加滚动均值,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,我得到了这个数字:
鉴于此代码的这种简单性,我显然犯了一个非常基本的错误,我只是看不到它是什么。
编辑:有趣的是,尽管@AndreyPortnoy建议将索引设置为Date会导致Date不在索引中的奇怪错误,但是当我按照他的建议使用内置的时,该数字不再是一团糟,但由于某种原因,x轴反转了,并且刻度不再是日期,但显然是整数(?),即使df.types显示Date为datetime64 [ns]
@Sandipan \ Dey:这是数据集的样子。上面的代码,我使用pd.to_datetime()转换为datetime64,并尝试使用df [::-1]来解决在向图形添加第二个图(mov_avg)时将其反转的问题(但不是当图形只有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
,而是让pandas
和matplotlib
进行推断。
您可以使用内置的绘图工具来简化代码,如下所示:
df['mov_avg'] = df['Close'].rolling(window=7).mean()
df[['Close', 'mov_avg']].plot(figsize=(14, 7))