使用matplotlib和时间序列数据的意外绘图行为

时间:2014-03-17 09:42:42

标签: python-2.7 time matplotlib pandas time-series

我想使用matlplotlib绘制时间序列的折线图,但matplotlib不会绘制我的所有数据,除非我使用.plot_date()或使用.plot()传递o作为标记的论据。

如果我使用.plot_date.plot()并使用' - '标记,则我的数据无法正确绘制:

enter image description here

有人知道为什么会这样,以及如何解决这个问题?我需要数据点与线连接。

提前致谢。

这是我目前的代码:

import pandas as pd
import matplotlib.pyplot as plt
import dateutil
from datetime import date, datetime, timedelta

plt.plot(sve2_all['MeHg ng/l']['1993-01-18':'1997-05-02'].index, sve2_all['MeHg ng/l']['1993-01-18':'1997-05-02'],'bo')
plt.xticks(rotation=70)
plt.show()

我的数据位于Pandas DataFrame中,索引为datetime64

2 个答案:

答案 0 :(得分:1)

您的Dataframe中可能有很多NaN个值。 Matplotlib仅在连续(有效)数据点之间绘制一条线,并在NaN值处留下间隙。

如果是这种情况,在绘图之前删除NaN应该可以解决问题。例如:

dftmp = sve2_all['MeHg ng/l']['1993-01-18':'1997-05-02'].dropna()
plt.plot(dftmp.index, dftmp,'b-')

答案 1 :(得分:0)

对于Pandas的Series,您可以{@ 1}} @RutgerKassies建议。但是这不适用于ser.dropna()。对于DataFrame,有人使用masks解决了该问题。 或者你可以DataFrame

df.fillna(method='ffill')

确保前向填充符合您的数据模型。