Matplotlib ist fill_between funktioniert nicht mit plot_date, alternativen?
Ich erstellen möchten ein Grundstück wie dieses:
Code:
P.fill_between(DF.start.index, DF.lwr, DF.upr, facecolor='blue', alpha=.2)
P.plot(DF.start.index, DF.Rt, '.')
aber mit Datumsangaben auf der x-Achse, wie dies (ohne Bänder):
code:
P.plot_date(DF.start, DF.Rt, '.')
das problem ist, dass fill_between schlägt fehl, wenn die x-Werte sind date_time Objekte.
Weiß jemand einen workaround? DF ist ein pandas DataFrame.
- In diesem Rezept wird es zeigen, wie Sie arbeiten: matplotlib.org/users/recipes.html#fill-between-and-alpha, aber ich bekomme die folgende Fehlermeldung: Zustand = ~(np.isfinite(a)) TypeError: ufunc 'isfinite" nicht unterstützt für die input-Typen, und die Eingänge können nicht sicher sein gezwungen, um einen der unterstützten Typen nach der casting-Regel "sicher"
- Ausgabe DF.info(): <class 'pandas.core.frame.DataFrame'> Int64Index: 967 Einträge, 0 966 Daten Spalten (insgesamt 9 Spalten): SE 967 non-null int64 start 967 nicht-null-Objekt Ende 967 nicht-null-Objekt-Fällen 967 non-null int64 Rt-961 non-null float64 Rt2 967 non-null float64 p1 967 non-null float64 lwr 967 non-null float64 upr 967 non-null float64 dtypes: float64(5), int64(2), Objekt(2) memory usage: 75.5+ KB Keine
- Konvertieren Sie die numpy datetime64[ns] - Typ um ein array von python datetime.datetime-Objekte mithilfe
to_pydatetime()
. Lösung entnommen aus hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würde es helfen, wenn Sie zeigen, wie
df
definiert ist. Was bedeutetdf.info()
Bericht? Dies zeigt uns die dtypes der Spalten.Gibt es viele Möglichkeiten, die Daten können dargestellt werden als strings, ints, floats, datetime.datetime, NumPy datetime64s, Pandas Zeitstempeln oder Pandas DatetimeIndex. Die richtige Möglichkeit zu zeichnen, es hängt davon ab, was Sie haben.
Hier ein Beispiel, das zeigt dein code funktioniert, wenn
df.index
ist ein DatetimeIndex:Wenn der index-string-Repräsentationen von Daten, dann (mit Matplotlib-version 1.4.2) erhalten Sie eine TypeError:
Erträge
In diesem Fall, das Update ist das konvertieren der Zeichenfolgen Zeitstempel:
plt.plot
undplt.fill_between
akzeptieren-arrays dtypedatetime64[ns]
gut.plt.fill_between()
ich bekommen:TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
. So der Grund für diesen Fehler sollte irgendwo anders sein?TypeError: ufunc 'isfinite' not supported for the input types
zeigt dieser Fehler kann möglicherweise auftreten, durch die version von matplotlib ist oder wenn Sie einen NumPy-array von dtype 'Objekt'. Und es gibt wahrscheinlich auch andere Gründe. So ist es schwer zu wissen, was die Ursache für dein problem, ohne ein reproduzierbares Beispiel.Bezüglich der Fehlermeldung chilliq:
Diese erzeugt werden kann, wenn der DataFrame Spalten "Objekt", "dtype" bei der Verwendung von fill_between. Ändern Sie die Spalte "Beispiel" - Typen und dann versuchen zu Plotten, wie folgt, führt zu dem Fehler oben:
Aus dfo.info() wir sehen, dass die Spalte Typen sind "Objekt":
Sicherzustellen, dass der DataFrame hat numerische Spalten wird das problem lösen. Um dies zu tun, die wir benutzen können pandas.to_numeric zu konvertieren, wie folgt:
Ich bekam ähnliche Fehler bei der Verwendung von fill_between:
Jedoch, in meinem Fall die Ursache der Fehler war ziemlich dumm. Ich war vorbei, color-parameter aber ohne explizites argument name, die verursacht es zu sein #4-parameter genannt
where
. So einfach machen Sie sicher, dass keyword-Parametern hat das Problem gelöst: