Matplotlib est fill_between ne fonctionne pas avec plot_date, des alternatives?
Je veux créer une intrigue comme cela:
Le code:
P.fill_between(DF.start.index, DF.lwr, DF.upr, facecolor='blue', alpha=.2)
P.plot(DF.start.index, DF.Rt, '.')
mais avec des dates dans l'axe x, comme ceci (sans bandes):
le code:
P.plot_date(DF.start, DF.Rt, '.')
le problème est que fill_between échoue lorsque les valeurs de x sont date_time objets.
Personne ne sait d'une solution de contournement? DF est une pandas DataFrame.
- Dans cette recette, c'est de montrer que le travail: matplotlib.org/users/recipes.html#fill-between-and-alpha mais j'obtiens l'erreur suivante: condition = ~(np.isfinite(a)) TypeError: ufunc 'isfinite' pas pris en charge pour les types d'entrée, et les entrées ne pouvait pas être sûre contraint à tout types pris en charge en fonction de la coulée de la règle de "coffre-fort"
- sortie de DF.info(): <de la classe de pandas.de base.cadre.DataFrame " > Int64Index: 967 entrées, de 0 à 966 colonnes de Données (total de 9 colonnes): SE 967 non-null int64 commencer 967 objet non-null de fin 967 objet non-null cas 967 non-null int64 Rt 961 non-null float64 Rt2 967 non-null float64 p1 967 non-null float64 des réacteurs à eau légère 967 non-null float64 epu 967 non-null float64 dtypes: float64(5), int64(2), l'objet(2) l'utilisation de la mémoire: 75.5+ KB Aucun
- Convertir le numpy datetime64[ns] type d'un tableau de python datetime.datetime objets à l'aide de
to_pydatetime()
. Solution prises à partir de ici.
Vous devez vous connecter pour publier un commentaire.
Il serait utile si vous montrer comment
df
est défini. Ce n'df.info()
rapport? Cela va nous montrer la dtypes des colonnes.Il existe de nombreuses façons que les dates peuvent être représentés comme des chaînes de caractères, entiers, des flotteurs, datetime.datetime, NumPy datetime64s, les Pandas d'Horodateurs, ou les Pandas DatetimeIndex. La manière correcte de terrain, il dépend de ce que vous avez.
Voici un exemple montrant votre code fonctionne si
df.index
est un DatetimeIndex:Si l'index a des représentations de chaîne de dates, puis (avec Matplotlib version 1.4.2) vous obtenez une erreur TypeError:
rendements
Dans ce cas, la solution est de convertir les chaînes de caractères à Horodateurs:
plt.plot
etplt.fill_between
accepter des tableaux de dtypedatetime64[ns]
l'amende juste.plt.fill_between()
j'obtiens: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''
. Donc, la raison de cette erreur doit être quelque part d'autre?TypeError: ufunc 'isfinite' not supported for the input types
montre cette erreur peut éventuellement survenir en raison de la version de matplotlib, ou lors de l'utilisation d'un tableau NumPy de dtype "objet". Et il y a probablement d'autres raisons. Il est donc difficile de savoir quelle est la cause de votre problème sans avoir un exemple reproductible.Concernant l'erreur signalée par chilliq:
Ceci peut être obtenu si le DataFrame les colonnes de "l'objet" dtype lors de l'utilisation de fill_between. Modification de l'exemple des types de colonnes, puis en essayant de tracer, comme suit, les résultats de l'erreur ci-dessus:
De dfo.info() nous voyons que les types de colonne est un "objet":
Veiller à ce que le DataFrame a numérique colonnes permettra de résoudre le problème. Pour ce faire, nous pouvons utiliser les pandas.to_numeric à convertir, comme suit:
J'ai eu d'erreur similaire lors de l'utilisation fill_between:
Cependant, dans mon cas, la cause de l'erreur était plutôt stupide. J'ai été en passant le paramètre de couleur, mais sans argument explicite nom qui fait #4 paramètre appelé
where
. Donc tout simplement de faire assurer les paramètres de mot clé est la clé résolu le problème: