【问题标题】:Remove interpolation Time series plot for missing values删除缺失值的插值时间序列图
【发布时间】:2016-07-28 02:57:48
【问题描述】:

我正在尝试绘制时间序列数据,但我遇到了一些问题。

我正在使用此代码:

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

我明白了:

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

我怎样才能做到这一点?

【问题讨论】:

  • 那么你只想要一个散点图吗? IE。缺失值之间没有线?
  • 我猜你要么想要一个散点图,就像@Sam 已经说过的那样,要么你想改变你的 X 轴以使其没有间隙 - 对吗?

标签: python pandas matplotlib plot time-series


【解决方案1】:

由于您使用的是 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

这里是一个来自 DataFrame 的列的示例,带有DatetimeIndex

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()

应该产生这样的情节:

这里的技巧是在调用.plot 方法时将日期替换为不触发matplotlib 内部日期处理的某个范围的值。

稍后,当绘图完成后,将刻度标签替换为实际日期。 或者,调用.autofmt_xdate() 使标签可读。

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 2016-01-16
    • 1970-01-01
    • 2016-03-28
    • 2021-01-22
    • 1970-01-01
    • 2020-02-05
    • 2013-05-03
    • 2020-10-23
    相关资源
    最近更新 更多