2017-06-29 4 views
1

J'essaie de tracer un nuage de points en utilisant mplot3d mais la méthode scatter me donne une erreur de valeur: 'xs' et 'ys' doivent être de la même taille. Lorsque j'imprime leurs types et leurs tailles, ils semblent parfaits. Je suis incapable de comprendre ce qui ne va pas.Obtention d'une erreur de valeur sur scatter() de mplot3d: arguements xs et ys doivent avoir la même taille. Mais ils ont la même taille

Voici la partie de mon code:
'mat2' est 512 X 4 matrice qui est déjà calculée.

mat2 = np.array(mat2) 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
co = [] 

xx = mat2[:,:1] 
yy = mat2[:,:2] 
z = mat2[:,:3] 
co = mat2[:,:4] 

#printing the size and types of the arguments to the scatter() 
print(str(len(xx))+str(type(xx))+' '+str(len(yy))+str(type(yy))+' '+str(len(z))+' '+str(len(co))) 

ax.scatter(np.array(xx), np.array(yy), z=np.array(z), c=np.array(co), cmap=plt.hot()) 

Voici une capture d'écran de la sortie que je reçois - ValueError Screenshot

Toute aide?

+0

Lorsque vous vous renseignez sur une erreur, vous devez fournir un [mcve] du problème. – ImportanceOfBeingErnest

+0

Je suis désolé. Nouveau ici. – AlMikFox

Répondre

0

xx et yy ne sont pas de la même taille. Au lieu d'imprimer la longueur, vous devez imprimer la forme.

print(xx.shape) 

Vous remarquerez que xx est de forme (512, 1) et yy est de forme (512,2). Par conséquent yy a deux colonnes et donc deux fois plus d'entrées que xx.

Comme il semble que vous voulez tracer une dispersion de la deuxième colonne de mat2 contre le premier, vous devez créer xx et yy en tant que tel:

xx = mat2[:,0] 
yy = mat2[:,1] 

Le même est bien sûr vrai pour les autres tableaux z et co.

+0

Merci pour l'aide. Très appréciée. – AlMikFox