Disons que je crée trois listes:
from mpl_toolkits import mplot3d from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt %matplotlib notebook fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z, c='r', marker='o') plt.show()
Comment puis-je disperser cela et simplement inclure uniquement les points avec des nombres (c'est-à-dire exclure le point "aucun"). Mon code ne produira pas de nuage de points lorsque j'inclus ces listes (cependant, lorsque j'inclus un nombre au lieu de "Aucun", cela fonctionne):
x=[1,2,3] y=[4,5,6] z=[1,None,4]
3 Réponses :
Vous pouvez faire
array_containing_nans = np.array(list_containing_nones, dtype=float)
et remplacer votre None
par un np.nan
. Les points contenant np.nan
ne seront pas tracés dans votre nuage de points. Consultez ce document matplotlib pour plus d'informations.
Si vous avez de longues listes contenant Aucun
, vous pouvez effectuer la conversion via
import numpy as np
vous pouvez utiliser numpy.nan
au lieu de None
import numpy as np z=[1,None,4] z_numpy = np.asarray(z, dtype=np.float32) .... ax.scatter(x, y, z_numpy, c='r', marker='o')
Vous devriez utiliser NaNs
au lieu de None
qui n'est pas la même chose. Un NaN
est un flottant.
Exemple minimal
import numpy as np import matplotlib.pyplot as plt x=[1,2,3] y=[4,5,6] z=[1,np.nan,4] plt.scatter(x,y,z) plt.show()
Je suppose que cela dépend de la façon dont vous voulez traiter les points 2D dans votre tracé 3D, mais la solution simple pour exclure le point None est de remplacer les valeurs None par np.nan. Vous pouvez également conserver les 3 points, auquel cas vous pouvez les remplacer par 0