去除插值时间序列图中的缺失值。

10
我想绘制一组时间序列数据,但我遇到了一些问题。
我正在使用以下代码:

I'm trying to plot a time series data but I have some problems.

I'm using this code:

from matplotlib import pyplot as plt
plt.figure('Fig')
plt.plot(data.index,data.Colum,'g', linewidth=2.0,label='Data')

我得到了这个: 在此输入图像描述

但我不想要缺失值之间的插值!

我应该怎么做?


1
所以你只是想要一个散点图,对吧?也就是说,没有缺失值之间的连线? - Sam
我猜你想要一个散点图,就像@Sam已经说过的那样,或者你想改变你的X轴,使它不再有间隙 - 对吗? - MaxU - stand with Ukraine
1个回答

6

由于您正在使用pandas,因此可以这样做:

import pandas as pd
import matplotlib.pyplot as plt

pd.np.random.seed(1234)
idx = pd.date_range(end=datetime.today().date(), periods=10, freq='D')
vals = pd.Series(pd.np.random.randint(1, 10, size=idx.size), index=idx)
vals.iloc[4:8] = pd.np.nan
print vals

这是一个带有DatetimeIndex的DataFrame列的示例。
2016-03-29    4.0
2016-03-30    7.0
2016-03-31    6.0
2016-04-01    5.0
2016-04-02    NaN
2016-04-03    NaN
2016-04-04    NaN
2016-04-05    NaN
2016-04-06    9.0
2016-04-07    1.0
Freq: D, dtype: float64

要在没有日期的情况下绘制数据为NaN的图表,您可以像这样操作:
fig, ax = plt.subplots()
ax.plot(range(vals.dropna().size), vals.dropna())
ax.set_xticklabels(vals.dropna().index.date.tolist());
fig.autofmt_xdate()

应该会生成这样的一个图形:

enter image description here

这里的技巧是用一些值的范围来替换日期,以避免在调用.plot方法时触发matplotlib的内部日期处理。
后来,在绘图完成后,将刻度标签替换为实际的日期。 可选择调用.autofmt_xdate()使标签更易读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接