2012-09-04 30 views
15

Làm thế nào chúng ta có thể vẽ các vectơ toán 2D với matplotlib? Có ai có một ví dụ hoặc gợi ý về điều đó?Làm thế nào để vẽ vectơ toán học 2d với matplotlib?

Tôi có một vài vectơ được lưu trữ dưới dạng các mảng 2D numpy và tôi muốn vẽ chúng dưới dạng các cạnh được chỉ dẫn.

Các vectơ này có thể vẽ được xây dựng như sau:

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:

Tôi chỉ cần thêm cốt truyện của câu trả lời cuối cùng của tcaswell cho bất cứ ai quan tâm đến đầu ra và muốn vẽ vectơ 2d với matplotlib: enter image description here

+0

Bạn có muốn vẽ một vectơ bằng 'quiver' không? http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.quiver – halex

+0

Có một bộ sưu tập khá tốt các ví dụ (có mã!) trên trang web dự án: http://matplotlib.sourceforge.net/examples /index.html, bao gồm bản trình diễn của người gửi: http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html – abought

+0

@halex và lúc đó, nhờ các ví dụ của bạn ;-), điều tôi muốn để vẽ các vectơ riêng lẻ. Tôi đã thêm một mã để làm cho nó rõ ràng. – pacodelumberg

Trả lời

30

Đề xuất trong nhận xét của halex là chính xác, bạn muốn sử dụng rung động (doc), nhưng bạn cần phải tinh chỉnh các thuộc tính một chút.

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

Điều đó trông thực sự mát mẻ, cảm ơn. – pacodelumberg

+0

Dấu hoa thị làm gì? (bên trong cuộc gọi đến zip trên dòng 4) –

+1

Biến zip bằng dấu sao là để giải nén! https://docs.python.org/3/library/functions.html#zip –

1

Nó khá đơn giản. Hy vọng ví dụ này sẽ giúp.

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

Sẽ tạo ra:

enter image description here

Để vẽ các mảng bạn chỉ có thể cắt chúng ra thành các vector 1D và âm mưu chúng. Tôi đã đọc tài liệu đầy đủ của matplotlib cho tất cả các tùy chọn khác nhau. Nhưng bạn có thể xử lý một vectơ cứng nhắc như thể nó là một bộ bình thường cho hầu hết các ví dụ.

+0

Cảm ơn câu trả lời của bạn, tôi có nghĩa là vectơ toán học là mũi tên (các cạnh được hướng). – pacodelumberg

+0

Ahh, xin lỗi, tôi nghĩ bạn chỉ là một vectơ số. Bạn có thể cung cấp mẫu mã không? – emhart

+0

np, tôi vừa thêm một đoạn mã đơn giản cho định nghĩa vectơ. – pacodelumberg

Các vấn đề liên quan