2016-04-07 7 views
3

Ich versuche, eine Zeitreihendaten zu zeichnen, aber ich habe einige Probleme.Interpolation entfernen Zeitreihendiagramm für fehlende Werte

Ich verwende diesen Code:

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

Und ich bekomme diese: enter image description here

aber ich nicht die Interpolation zwischen fehlenden Werten wollen!

Wie kann ich das erreichen?

+1

Sie wollen also nur ein Streudiagramm? I.e. keine Linien zwischen fehlenden Werten? – Sam

+0

Ich vermute, Sie wollen entweder ein Streudiagramm, wie @Sam schon gesagt hat, oder Sie wollen Ihre X-Achse so ändern, dass sie keine Lücken hat - richtig? – MaxU

Antwort

0

Da Sie Pandas verwenden könnten Sie so etwas tun:

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 

Hier ist ein Beispiel einer Säule aus einem Datenrahmen mit 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 

es zu zeichnen, ohne Termine, wo Daten NaN könnte man so etwas tun:

fig, ax = plt.subplots() 
ax.plot(range(vals.dropna().size), vals.dropna()) 
ax.set_xticklabels(vals.dropna().index.date.tolist()); 
fig.autofmt_xdate() 

, die eine Handlung wie diese produzieren sollte:

enter image description here

Die hier Trick ist, die Daten mit einer gewissen Wertebereich zu ersetzen, die nicht matplotlib internen Datum Verarbeitung auslösen, wenn Sie .plot Methode aufrufen.

Später, wenn das Plotten fertig ist, ersetzen Sie die Ticklabels mit tatsächlichen Daten. Rufen Sie optional .autofmt_xdate() an, um die Etiketten lesbar zu machen.

Verwandte Themen