2012-09-04 31 views
15

Come possiamo tracciare i vettori di matematica 2D con matplotlib? Qualcuno ha un esempio o un suggerimento a riguardo?Come stampare i vettori di matematica 2d con matplotlib?

Ho un paio di vettori memorizzati come array 2D numpy e mi piacerebbe tracciarli come bordi diretti.

I vettori devono essere tracciati sono costruite come di seguito:

import numpy as np 
# a list contains 3 vectors; 
# each list is constructed as the tail and the head of the vector 
a = np.array([[0, 0, 3, 2], [0, 0, 1, 1], [0, 0, 9, 9]]) 

Edit:

Ho appena aggiunto la trama della risposta finale del tcaswell per chiunque sia interessato l'output e voglio tracciare i vettori 2d con matplotlib: enter image description here

+0

Volete tracciare un campo vettoriale con 'faretra'? http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.quiver – halex

+0

C'è una discreta raccolta di esempi (con codice!) sul sito del progetto: http://matplotlib.sourceforge.net/examples /index.html, inclusa una demo quiver: http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html – abought

+0

@halex e al momento, grazie per i tuoi esempi ;-), il fatto è che mi piacerebbe per tracciare i singoli vettori. Ho aggiunto un codice per chiarire. – pacodelumberg

risposta

30

Il suggerimento nei commenti di halex è corretto, si desidera utilizzare la faretra (doc), ma è necessario modificare leggermente le proprietà.

import numpy as np 
import matplotlib.pyplot as plt 

soa = np.array([[0, 0, 3, 2], [0, 0, 1, 1], [0, 0, 9, 9]]) 
X, Y, U, V = zip(*soa) 
plt.figure() 
ax = plt.gca() 
ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=1) 
ax.set_xlim([-1, 10]) 
ax.set_ylim([-1, 10]) 
plt.draw() 
plt.show() 
+0

Sembra davvero fantastico, grazie. – pacodelumberg

+0

Cosa fa l'asterisco? (all'interno della chiamata per zip sulla linea 4) –

+1

Si scopre zip con un asterisco è per decomprimere! https://docs.python.org/3/library/functions.html#zip –

1

È piuttosto semplice. Spero che questo esempio aiuti.

import matplotlib.pyplot as plt 
import numpy as np 
x = np.random.normal(10,5,100) 
y = 3 + .5*x + np.random.normal(0,1,100) 
myvec = np.array([x,y]) 
plt.plot(myvec[0,],myvec[1,],'ro') 
plt.show() 

produrrà:

enter image description here

Per tracciare le matrici si può semplicemente tagliare fino in vettori 1D e tracciarli. Avrei letto tutta la documentazione di matplotlib per tutte le diverse opzioni. Ma puoi trattare un vettore intorpidito come se fosse una normale tupla per la maggior parte degli esempi.

+0

Grazie per la risposta, intendevo i vettori matematici come frecce (bordi diretti). – pacodelumberg

+0

Ahh, mi dispiace, pensavo che intendessi solo un vettore di numeri. Puoi fornire un campione di codice? – emhart

+0

np, ho appena aggiunto un segmento di codice semplice per la definizione del vettore. – pacodelumberg

Problemi correlati