2017-03-03 22 views
0

我是Python新手,需要一些幫助。這是問題:如何在Python中繪製多個用座標數組定義的矢量?

我用兩種不同的算法從圖像中提取了一些點源。由於 點是相同的,點的圖像座標應該是相同的,但算法適用於不同的函數,因此值接近但不完全相同。現在我需要在圖像大小的同一圖形中繪製矢量以顯示差異。我有四個數組。兩個分別保存用第一個算法(np.x1,np.y1)找到的點的x,y座標,另外兩個保存用第二個算法(np.x2,np.y2)找到的x,y值。

向量應該從x1,y1座標開始,然後轉到x2,y2座標。我可以得出只有一個向量(從np.x1 [0],np.y1 [0]至np.x2 [0],np.y2 [0])與該代碼:

import numpy as np 
import matplotlib.pyplot as plt 
np.x1=[1189.01,1185.0,1012.163,1873.221,194.2559] 
np.y1=[14.45688,979.85659999999996,639.15629999999,249.173599999,67.10436] 
np.x2=[1188.8416489474798,1184.843265982,1012.074063414,1873.077105230,194.30567379144] 
np.y2=[14.855950959,980.058587129,639.232680302,249.412057655,67.3004825209] 
soa = np.array([[np.x1[0]],[np.y1[0]],[np.x2[0]], np.y2[0]]) 
X, Y, U, V = zip(soa) 
plt.figure() 
ax = plt.gca() 
ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=10,) 
ax.set_xlim([0, 1472]) 
ax.set_ylim([0, 2184]) 
plt.draw() 
plt.show() 

並配有「而」循環,我可以繪製不同的圖形,但我怎麼能在同一個圖中繪製所有的矢量?或者你能建議一個更有效的方法來做到這一點?注意點x1 [i],y1 [i]和x2 [i],y2 [i]是相同的。

+1

你可以編輯你的代碼示例,以便它的工作?如果他們可以簡單地複製/粘貼代碼並運行它,人們更可能會提供幫助。 – kazemakase

+0

感謝您注意@kazemakase。我添加了座標的變量。如果有任何其他錯誤,請讓我知道。 – Burak

+0

還編輯了語法錯誤。 – Burak

回答

0

注plt.quiver的語法(X,Y,U,V):

X和Y是其中引出矢量開始的座標。 U和V是向量在X和Y方向的方向。 如果您給出每個值的列表(或1D numpy數組),您可以一次繪製多個向量。

它應該是這樣的:

import numpy as np 
import matplotlib.pyplot as plt 
np.x1=np.array([1189.01,1185.0,1012.163,1873.221,194.2559]) 
np.y1=np.array([14.45688,979.85659999999996,639.15629999999,249.173599999,67.10436]) 
np.x2=np.array([1188.8416489474798,1184.843265982,1012.074063414,1873.077105230,194.30567379144]) 
np.y2=np.array([14.855950959,980.058587129,639.232680302,249.412057655,67.3004825209]) 
plt.figure() 
ax = plt.gca() 
ax.quiver(np.x1, np.y1, np.x2-np.x1, np.y2-np.y1, angles='xy', scale_units='xy', scale=10) 
ax.set_xlim([0, 1472]) 
ax.set_ylim([0, 2184]) 
plt.draw() 
plt.show() 

請注意,您的載體是很短的相比,他們的起源的距離,所以你可能不會看到你的地塊,但只是個箭頭。

+0

謝謝@Stefan。這解決了我的問題。我也意識到我的變量不是數組,而是字典。這就是爲什麼我嘗試了很多示例代碼,但他們沒有工作。 – Burak

相關問題