2012-07-18 21 views
13

Sono nuovo in pitone. Voglio generare le linee, che ottengo da un array in 3D.Come posso creare una semplice linea 3D con Matplotlib?

Ecco il codice:

VecStart_x = [0,1,3,5] 
VecStart_y = [2,2,5,5] 
VecStart_z = [0,1,1,5] 
VecEnd_x = [1,2,-1,6] 
VecEnd_y = [3,1,-2,7] 
VecEnd_z =[1,0,4,9] 

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

ax.plot([VecStart_x ,VecEnd_x],[VecStart_y,VecEnd_y],[VecStart_z,VecEnd_z]) 
plt.show() 
Axes3D.plot() 

ho allways ottenere questo errore:

ValueError: terzo arg deve essere una stringa di formato

Apprezzo il vostro aiuto.

risposta

15

Immagino che vogliate tracciare 4 linee. Quindi puoi provare

for i in range(4): 
    ax.plot([VecStart_x[i], VecEnd_x[i]], [VecStart_y[i],VecEnd_y[i]],zs=[VecStart_z[i],VecEnd_z[i]]) 

Come suggerito da @Nicolas, date un'occhiata alla galleria matplotlib.

+0

Che risolto. Grazie. –

5

La galleria è un ottimo punto di partenza per scoprire esempi:

http://matplotlib.org/gallery.html

V'è un esempio di diagramma linea 3d qui:

http://matplotlib.org/examples/mplot3d/lines3d_demo.html

Si vede che è necessario passare alla ax.plot funzione 3 vettori. In realtà stai passando l'elenco degli elenchi. Non so cosa si intende per inizio e fine sottolista, ma la riga seguente dovrebbe funzionare:

ax.plot(VecStart_x + VecEnd_x, VecStart_y + VecEnd_y, VecStart_z +VecEnd_z) 

Qui ho riassumere sottolista (concatenamento) in modo da avere una sola lista per asse.

Problemi correlati