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:
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.
Sie wollen also nur ein Streudiagramm? I.e. keine Linien zwischen fehlenden Werten? – Sam
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