1
votes

Le nuage de points Python ne fonctionne pas avec les points "Aucun"

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]


1 commentaires

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


3 Réponses :


1
votes

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


0 commentaires

0
votes

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')


0 commentaires

0
votes

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()


0 commentaires