python - 绘制一年时间序列中的每周滴答数据

标签 python matplotlib pandas time-series

我有一个时间序列,其中列出了几个月交易历史中 future 合约的报价数据。我想要一个图表(折线图)显示时间序列中最近 4 周的每周报价数据的交易历史(该系列不断更新)

X 轴将显示周一至周五的日期,并且图表上随时会有 4 条单独的线详细说明分时数据。我已经设法使用一些绘制每天最后一笔交易的代码来做到这一点,但我需要绘制报价数据而不是每条线每天只绘制一个数据点。

这是我试图用刻度数据表示的 Excel 图表 (!),只有线条会更加不稳定,因为会有更多的数据点。
本质上,一张图表上的 4 条线显示了过去 4 周的交易报价数据:

weekly plot

我没有我试过的代码(它在工作),但明天可以上传。

最佳答案

给你一些假数据:

In [11]: rng = pd.date_range('2013', freq='H', periods=1000)

In [12]: df = pd.DataFrame(np.random.randn(len(rng)), index=rng, columns=['data'])

首先,填充周数(作为列):

In [13]: df['week'] = df.index.week

接下来,计算自一周开始以来的时间(可能有更优雅的方法):

In [14]: df['week_beginning'] = df.index.to_period('W').to_timestamp()

In [15]: df['week_time'] = df.index.to_series() - df['week_beginning']

现在您可以使用 pivot_table :

In [16]: df.pivot_table(values='data', rows='week_time', cols='week')
Out[16]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 168 entries, 0 to 601200000000000
Data columns (total 7 columns):
33    120  non-null values
34    168  non-null values
35    168  non-null values
36    168  non-null values
37    168  non-null values
38    168  non-null values
39    40  non-null values
dtypes: float64(7)

听起来这就是您要绘制的内容(使用 your previous question 中的技术):

In [17]: df.pivot_table('data', 'week_time', 'week').rename(columns=lambda x: 'Week ' + str(x)).plot()

注意:这个特定的图相当困惑,因为有很多数据点,事先聚合一些数据可能是有意义的。

关于python - 绘制一年时间序列中的每周滴答数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18242617/

相关文章:

python-3.x - 删除具有高缺失值的列

python - Concurrent.futures > 在命令行中运行良好,而不是在使用 pyinstaller 或 py2exe 编译时

matplotlib - 如何在 Google Colab 中使用 matplotlib 绘制交互式可绘制图像?

python - 在 matplotlib 中将 x 轴移动到绘图的顶部

python - 如何以图像的形式保存CNN模型的输出(预测)?

python - 假期倒计时

python pandas 用最大值填充 NaN 或毯子

python - 如何将文本文件转换为Excel文件,而不删除数据之间的空格

python - 在控制台而不是 Web 浏览器上显示 Django 错误

python - 使用 py2app 捆绑 PyQt5 应用程序 : keep getting "Abort trap: 6" error