python - 绘制滚动平均值的 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()
有了这个样本数据集,我得到了这个数字:
鉴于此代码的简单性,我显然犯了一个非常基本的错误,我只是看不出它是什么。
编辑:有趣的是,虽然@AndreyPortnoy 将索引设置为 Date 的建议会导致 Date 不在索引中的奇怪错误,但当我按照他的建议使用内置时,这个数字不再是一团糟,但对于某些人来说原因 x 轴反转,刻度不再是日期,但显然是整数(?)即使 df.types 显示 Date is datetime64[ns]
@Sandipan\ Dey:这是数据集的样子。根据上面的代码,我使用 pd.to_datetime() 转换为 datetime64,并尝试 df[::-1] 解决当第二个图 (mov_avg) 添加到图中时它被反转的问题(但不是当图形只有 1 个情节时反转。)
解决方案
移动平均线的日期从 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))
推荐阅读
- varnish - 如何让 Varnish 从缓存中回答,而不去后端
- visual-studio-code - 在 Visual Studio 代码中向现有的 extension.js 添加扩展
- docker - 将参数传递给 dockerfile 无法正常工作
- java - 在 @Async 调用中正确使用 EntityManager
- oracle - 索引与完整扫描,我如何确定使用哪个以及何时使用
- laravel - Laravel Socialite:项目中未使用旧版 People API
- sql - SQL 根据条件将数据从一个表迁移到另一个表
- jquery - 通过 Jquery 保存到 MVC 模型输入后如何在 Html 中显示记录
- java - 我想拆分字符串
- javascript - 根据活动的引导轮播幻灯片更改内容