我想在Python中绘制垂直向量

时间:2016-12-17 19:47:40

标签: python vector plot

我想简单地在2D中绘制垂直向量。我已经在下面的代码中实现了两种绘制它们的方法,但是在绘制绘图时,矢量不会“看起来”垂直于我。如果它有任何区别我正在使用Spyder。

import numpy as np
import matplotlib.pyplot as plt
x1=[0,0,4,3]
x2=[0,0,-3,4]
x3=[0,0,3,-4]
soa =np.array([x1,x2,x3]) 
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([-10,10])
ax.set_ylim([-10,10])
plt.draw()
plt.show()

import pylab as pl
from matplotlib import collections  as mc
lines = [[(0, 1), (4, 3)], [(-3, 4), (3, -4)]]
c = np.array([(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1)])
lc = mc.LineCollection(lines, colors=c, linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)

2 个答案:

答案 0 :(得分:3)

您的问题是x和y轴的单位大小不同。你需要强迫他们平等。

在matplotlib.pyplot中,添加行

plt.axes().set_aspect('equal')

在您使用

显示图表之前
plt.show()

我在Spyder的IPython控制台中得到了这个结果:

enter image description here

在pylab中,添加行

ax.set_aspect('equal')

最后。然而,这些线段仍然看起来不垂直,这是因为它们实际上不是垂直的。第一个红色线段的斜率为2/3,因此第二个绿色线段的斜率应为-3/2,但实际上斜率为-4/3。也许你的行改为

lines = [[(0, 1), (4, 3)], [(-3, 4), (3, -5)]]

(我将结束-4更改为-5)以获得正确的第二个斜率。你会从第一个数字改为第二个数字:

enter image description here

enter image description here

并且最后看起来垂直。

答案 1 :(得分:1)

问题是图形画布的纵横比。

使用:

plt.figure(figsize=(6,6))