Python 2.7 使用matplotlib和时间序列数据的意外打印行为
我想使用matlplotlib绘制时间序列的线形图,但是matplotlib不会绘制所有数据,除非我使用Python 2.7 使用matplotlib和时间序列数据的意外打印行为,python-2.7,time,matplotlib,pandas,time-series,Python 2.7,Time,Matplotlib,Pandas,Time Series,我想使用matlplotlib绘制时间序列的线形图,但是matplotlib不会绘制所有数据,除非我使用.plot\u date()或使用.plot()传递o作为标记的参数 如果使用.plot\u date或.plot()并使用“-”标记,则我的数据无法正确打印: 有人知道为什么会发生这种情况以及如何解决吗?我需要数据点与线连接 提前谢谢 以下是我当前的代码: import pandas as pd import matplotlib.pyplot as plt import dateutil
.plot\u date()
或使用.plot()
传递o
作为标记的参数
如果使用.plot\u date
或.plot()
并使用“-”标记,则我的数据无法正确打印:
有人知道为什么会发生这种情况以及如何解决吗?我需要数据点与线连接
提前谢谢
以下是我当前的代码:
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()
我的数据在一个
数据框中
,索引是datetime64
您的数据框中可能有很多NaN
值。Matplotlib仅在连续(有效)数据点之间绘制一条线,并在NaN
值处留有间隙
如果是这样的话,在打印之前删除NaN
,应该可以做到这一点。例如:
dftmp = sve2_all['MeHg ng/l']['1993-01-18':'1997-05-02'].dropna()
plt.plot(dftmp.index, dftmp,'b-')
对于熊猫的
系列
,您可以按照@RutgerKassies建议的ser.dropna()
。但是,这不适用于DataFrame
s。对于数据帧,有人使用解决了这个问题。
或者您可以只df.fillna(method='ffill')
:
确保正向填充符合数据模型的逻辑。谢谢,这就是问题所在,您的解决方案解决了它!
sve2_all['MeHg ng/l ffill']= sve2_all['MeHg ng/l'].fillna(method='ffill')
sve2_all['MeHg ng/2 ffill']= sve2_all['MeHg ng/2'].fillna(method='ffill')
sve2_all[['MeHg ng/l ffill','MeHg ng/2 ffill']].plot()