如何在Python中绘制用坐标数组定义的多个向量?

时间:2017-03-03 09:55:22

标签: python matplotlib vector plot

我是Python的新手,我需要一些帮助。这就是问题所在:

我使用两种不同的算法从图像中提取了一些点源。以来 点是相同的,点的图像坐标应该相同,但算法使用不同的函数,因此值接近但不完全相同。现在我需要在图形大小的同一图形中绘制矢量以显示差异。

我有四个阵列。两个分别保存第一个算法找到的点的x,y坐标(np.x1,np.y1),另外两个保存用第二个算法找到的x,y值(np.x2,np.y2)。 / p>

矢量应从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()

使用"而#34;循环,我可以绘制不同的图形,但我如何绘制同一图形中的所有向量?或者你能建议一个更有效的方法吗?

注意点x1 [i],y1 [i]和x2 [i],y2 [i]是相同的。

1 个答案:

答案 0 :(得分: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()

请注意,您的向量与其原点的距离相比非常短,因此您可能不会在图中看到箭头而只是点。