J'aimerais ne pas utiliser la séquence non-Tuple pour l'indexation multidimensionnelle afin que le script prenne en charge la version future de Python lorsque cela changera.
Ci-dessous le code que j'utilise pour tracer le graphique:
data = np.genfromtxt(Example.csv,delimiter=',', dtype=None, names=True,
converters={0: str2date})
p1, = Host.plot(data["column_1"], data["column_2"], "b-", label="column_2")
p2, = par1.plot(data["column_1"], data['column_3'], "r-", label="column_3")
p3, = par2.plot(data["column_1"], data["column_4"], "g-", label="column_4")
Host.set_xlim([data["column_1"][0], data["column_1"][-1]])
Host.set_ylim(data["column_2"].min(), data["column_2"].max())
par1.set_ylim(data["column_3"].min(), data["column_3"].max())
par2.set_ylim(data["column_4"].min(), data["column_4"].max())
Je peux reproduire l'avertissement avec:
In [313]: x = np.zeros((4,2))
In [315]: x[:,1]
Out[315]: array([0., 0., 0., 0.])
En remplaçant le :
par un slice(None)
, nous pouvons écrire cette indexation comme suit:
In [316]: x[[slice(None),1]]
/usr/local/bin/ipython3:1: FutureWarning: Using a non-Tuple sequence for multidimensional indexing is deprecated; use `arr[Tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
#!/usr/bin/python3
Out[316]: array([0., 0., 0., 0.])
Ce devrait vraiment être un tuple, plutôt qu'une liste:
In [317]: x[(slice(None),1)]
Out[317]: array([0., 0., 0., 0.])
In [318]: x[Tuple([slice(None),1])]
Out[318]: array([0., 0., 0., 0.])
L'avertissement nous indique que le format de la liste était correct, mais qu'il générera à l'avenir une erreur.
Je ne vois rien dans votre code qui fasse ce genre de tranche dans une liste d'indexation.
data
from genfromtxt
est un tableau structuré, donc l'indexation par nom de champ est normale: data["column_1"]
. Il est donc probable que l'avertissement soit généré dans le code plot
. Mais nous ne savons pas où. L'avertissement ne donne aucune sorte de trace de pile d'erreur, faites-le?
Donc, sans un exemple de tableau comme data
ou un fichier csv comme Example.csv
, nous ne pouvons pas reproduire l'avertissement et Dig plus loin.
Pour commencer, je mettrais une sorte de print
entre chacune de vos lignes de code. L’objectif est de déterminer quel appel matplotlib
génère l’avertissement.
Si par exemple il est produit en
Host.set_xlim([data["column_1"][0], data["column_1"][-1]])
Je pourrais essayer de changer cet appel en
Host.set_xlim((data["column_1"][0], data["column_1"][-1]))
ou
Host.set_xlim(data["column_1"][0], data["column_1"][-1])
C'est un peu de devinette sauvage ...
Ce dernier SO nous aide à identifier une fonction problématique dans le package scipy.stats
. Il construit une liste de tranches et l'utilise sans autre conversion en Tuple.
J'aurais testé cela avant de poster (enfin, je l'ai testé pour les zones où j'avais le même problème), mais je suppose que cela vous aidera. En utilisant votre première ligne où vous appelez un tracé ci-dessus, utilisez le transtypage de type Tuple comme je l’ai déjà montré et faites de même avec vos autres lignes appelant tracé.
p1, = Host.plot(Tuple(data["column_1"]),
Tuple(data["column_2"]),
"b-", label="column_2")
Quand j’ai étudié les méthodes d’indexation numpy, l’avertissement me semblait un peu plus logique. Cependant, je ne comprends pas vraiment pourquoi les choses doivent aller de cette façon.
La mise à jour de Scipy a résolu ce problème dans mon cas. Parce que la classe Scipy.stats était obsolète.