如何不绘制缺失的时期

Posted

技术标签:

【中文标题】如何不绘制缺失的时期【英文标题】:How not to plot missing periods 【发布时间】:2017-06-12 22:40:28 【问题描述】:

我正在尝试绘制时间序列数据,其中某些时期没有数据。数据被加载到数据框中,我正在使用df.plot() 绘制它。问题是缺失的时期在绘图时会连接起来,给人的印象是该时期存在价值,而事实并非如此。

这是一个问题的例子

9 月 1 日至 9 月 8 日以及 9 月 9 日至 9 月 25 日之间没有数据,但数据的绘制方式似乎在该期间存在值。

我希望在该期间显示零值,或者根本没有值。该怎么做?

为了清楚起见,我没有 [Sep 01, Sep 08], [Sep 09, Sep 29] 期间的 NaN 值,但根本没有数据(甚至在时间索引中也没有)。

【问题讨论】:

【参考方案1】:

考虑pd.Seriess

s = pd.Series(
    np.arange(10), pd.date_range('2016-03-31', periods=10)
).replace(3: np.nan, 6: np.nan)

s.plot()

你可以看到np.nan被跳过了。 然而:

s.fillna(0).plot()

0s 不会被跳过。

我建议s.replace(0, np.nan).plot()

【讨论】:

【参考方案2】:

您应该使用 NaN 值将缺失的日期添加到您的数据框中。然后,在绘制时,这些 NaN 打破了这条线——你会得到几条线段,它们之间有空的句点。

This answer 最好地解释了如何将缺失的日期添加到您的数据框中。总而言之,这应该可以解决问题:

df = df.reindex(pd.DatetimeIndex(df.index), fill_value=NaN)

【讨论】:

最好是df = df.reindex(pd.DatetimeIndex(df.index)),默认添加NaN。如果要指定NaN - df = df.reindex(pd.DatetimeIndex(df.index), fill_value=np.nan)

以上是关于如何不绘制缺失的时期的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制时间序列散点图,将缺失的 y 轴值显示为间隙?

Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙?

通过 Plotly 在 Shiny 应用程序中绘制的缺失数据

ggplot 不会绘制缺失的类别

用单独的线型在 ggplot2 中绘制缺失值

将缺失的日期添加到 pandas 数据框