2009-12-31 18 views
35

J'ai actuellement une matrice matricielle nx3. Je veux tracer les trois colonnes comme trois axes. Comment puis-je faire cela?Comment créer un diagramme de dispersion 3D en Python?

J'ai googlé et les gens ont suggéré d'utiliser Matlab, mais j'ai vraiment du mal à le comprendre. J'ai aussi besoin que ce soit un nuage de points.

Quelqu'un peut-il m'apprendre?

+1

Cherchez-vous une application pour faire l'intrigue, ou voulez-vous écrire du code (dans n'importe quelle langue) qui dessine l'intrigue? –

+0

Utilisez asymptote - c'est gratuit, puissant, et la qualité est géniale! –

+1

Si vous avez un tableau, je suppose que vous avez un programme et ce tableau en fait partie. S'il vous plaît, donnez-nous une chance de vous aider en indiquant quel type de programme (langue) c'est! –

Répondre

66

Vous pouvez utiliser matplotlib pour cela. matplotlib a un module mplot3d qui fera exactement ce que vous voulez.

from matplotlib import pyplot 
from mpl_toolkits.mplot3d import Axes3D 
import random 


fig = pyplot.figure() 
ax = Axes3D(fig) 

sequence_containing_x_vals = list(range(0, 100)) 
sequence_containing_y_vals = list(range(0, 100)) 
sequence_containing_z_vals = list(range(0, 100)) 

random.shuffle(sequence_containing_x_vals) 
random.shuffle(sequence_containing_y_vals) 
random.shuffle(sequence_containing_z_vals) 

ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals) 
pyplot.show() 

Le code ci-dessus génère une figure comme:

matplotlib 3D image

+0

Belle solution. Notez que 'plt.zlabel ('zlabel')' ne fonctionnera pas. Pour étiqueter l'axe z, vous devez utiliser: 'ax.set_zlabel ('Z')'. –

-3
+0

Vous devriez envisager sérieusement MayaVi. Nous utilisons ici MayaVi pour tous les tracés 3D et c'est vraiment bon. –

+1

-1, un lien n'est pas une réponse. –

0

Utilisez le code suivant cela a fonctionné pour moi:

# Create the figure 
    fig = plt.figure() 
    ax = fig.add_subplot(111, projection='3d') 

    # Generate the values 
    x_vals = X_iso[:, 0:1] 
    y_vals = X_iso[:, 1:2] 
    z_vals = X_iso[:, 2:3] 

    # Plot the values 
    ax.scatter(x_vals, y_vals, z_vals, c = 'b', marker='o') 
    ax.set_xlabel('X-axis') 
    ax.set_ylabel('Y-axis') 
    ax.set_zlabel('Z-axis') 

    plt.show() 

alors que X_iso est mon 3 -D array et pour X_vals, Y_vals, Z_vals j'ai copié/u sed 1 colonne/axe de ce tableau et affecté à ces variables/tableaux respectivement.