我想在Python中绘制垂直向量

Fre*_*red 5 python plot vector

我想简单地在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)
Run Code Online (Sandbox Code Playgroud)

Ror*_*ton 5

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

在 matplotlib.pyplot 中,添加行

plt.axes().set_aspect('equal')
Run Code Online (Sandbox Code Playgroud)

就在你显示图表之前

plt.show()
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

在pylab中,添加行

ax.set_aspect('equal')
Run Code Online (Sandbox Code Playgroud)

在末尾。但是,这些线段看起来仍然不垂直,那是因为它们实际上并不垂直。第一个红色线段的斜率是 2/3,所以第二个绿色线段的斜率应该是 -3/2,但实际上它的斜率是 -4/3。也许将您的线路更改为

lines = [[(0, 1), (4, 3)], [(-3, 4), (3, -5)]]
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

在此处输入图片说明

最后一个看起来是垂直的。