Python pandas 绘制有间隙的时间序列

标签 python pandas plot time-series

我正在尝试使用 TimeStamp indizes 绘制一个 pandas DataFrame,它的 indizes 中有时间间隔。使用 pandas.plot() 会在前一段的最后一个时间戳和下一段的第一个时间戳之间进行线性插值。我不想要线性插值,也不想要两个日期段之间的空白空间。有办法吗?

假设我们有一个带有 TimeStamp 索引的 DataFrame:

>>> import numpy as np
>>> import pandas as pd
>>> import matplotlib.pyplot as plt
>>> df = pd.DataFrame(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
>>> df = df.cumsum()

现在让我们把它的两个时间 block 绘制出来:

>>> df = pd.concat([df['Jan 2000':'Aug 2000'], df['Jan 2001':'Aug 2001']])
>>> df.plot()
>>> plt.show()

生成的图有一条插值线连接封闭间隙的时间戳。我不知道如何在这台机器上上传图片,但是这些图片来自Google Groups显示我的问题(interpolated.jpg、no-interpolation.jpg 和 no gaps.jpg)。我可以重新创建第一个,如上所示。第二个可以通过用 NaN 替换所有间隙值来实现(另请参见 this question )。如何实现省略时间间隔的第三个版本?

最佳答案

尝试:

df.plot(x=df.index.astype(str))

Skip the gap

您可能想要自定义刻度和刻度标签。

编辑

这适用于我使用 pandas 0.17.1 和 numpy 1.10.4。

您真正需要的是一种将 DatetimeIndex 转换为另一种与日期时间不同的类型的方法。为了获得有意义的标签,我选择了 str。如果 x=df.index.astype(str) 不适用于您的 pandas/numpy/whatever 组合,您可以尝试其他选项:

df.index.to_series().dt.strftime('%Y-%m-%d')
df.index.to_series().apply(lambda x: x.strftime('%Y-%m-%d'))
...

我意识到没有必要重置索引,所以我删除了那部分。

关于Python pandas 绘制有间隙的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085830/

相关文章:

python - 如何使用 Django 中的设置

python - 将基类转换为派生类python(或扩展类的更多pythonic方式)

python - 将两个每日系列合并为一小时系列

python - 系列的真值不明确

plot - GNUPLOT 如何为标签中的索引添加更多空间

python - 在 matplotlib 中设置颜色条范围

python:将两个嵌套字典与字典组合作为顶级键的值

python - Pandas Python : Concatenate dataframes having same columns

r - 绘制多个图的平均值的图

matlab - 如何在 MATLAB 中设置绘图的默认线型?