2012-09-04 29 views
15

¿Cómo podemos trazar vectores de matemáticas 2D con matplotlib? ¿Alguien tiene un ejemplo o sugerencia sobre eso?Cómo trazar vectores matemáticos 2D con matplotlib?

Tengo un par de vectores almacenados como matrices 2D numpy, y me gustaría dibujarlos como bordes dirigidos.

Los vectores que se pintarán están construidos como a continuación:

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

Editar:

simplemente añadí la trama de la respuesta final de tcaswell para cualquier persona interesada en la salida y desea trazar vectores 2d con matplotlib: enter image description here

+0

¿Desea trazar un vector vectorial con 'temblar'? http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.quiver – halex

+0

Hay una colección bastante buena de ejemplos (¡con código!) en el sitio del proyecto: http://matplotlib.sourceforge.net/examples /index.html, incluida una demostración de carcaj: http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html – abought

+0

@halex y en compensación, gracias por sus ejemplos ;-), la cosa es que me gustaría para trazar vectores individuales. Agregué un código para dejarlo en claro. – pacodelumberg

Respuesta

30

La sugerencia en los comentarios de halex es correcta, desea utilizar el carcaj (doc), pero debe ajustar un poco las propiedades.

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

Eso se ve muy bien, gracias. – pacodelumberg

+0

¿Qué hace el asterisco? (dentro de la llamada para comprimir en la línea 4) –

+1

¡Desactiva el zip con un asterisco para descomprimir! https://docs.python.org/3/library/functions.html#zip –

1

Es bastante sencillo. Espero que este ejemplo ayude.

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

producirá:

enter image description here

Para trazar las matrices sólo se puede cortar para arriba en vectores de 1D y trazarlos. Leí la documentación completa de matplotlib para todas las diferentes opciones. Pero puede tratar un vector numpy como si fuera una tupla normal para la mayoría de los ejemplos.

+0

Gracias por su respuesta, quise decir vectores matemáticos como flechas (bordes dirigidos). – pacodelumberg

+0

Ahh, lo siento, pensé que querías decir solo un vector de números. ¿Puedes proporcionar una muestra de código? – emhart

+0

np, acabo de agregar un segmento de código simple para la definición del vector. – pacodelumberg

Cuestiones relacionadas