我想简单地在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)
答案 0 :(得分:3)
您的问题是x和y轴的单位大小不同。你需要强迫他们平等。
在matplotlib.pyplot中,添加行
plt.axes().set_aspect('equal')
在您使用
显示图表之前plt.show()
我在Spyder的IPython控制台中得到了这个结果:
在pylab中,添加行
ax.set_aspect('equal')
最后。然而,这些线段仍然看起来不垂直,这是因为它们实际上不是垂直的。第一个红色线段的斜率为2/3,因此第二个绿色线段的斜率应为-3/2,但实际上斜率为-4/3。也许你的行改为
lines = [[(0, 1), (4, 3)], [(-3, 4), (3, -5)]]
(我将结束-4更改为-5)以获得正确的第二个斜率。你会从第一个数字改为第二个数字:
并且最后看起来垂直。
答案 1 :(得分:1)
问题是图形画布的纵横比。
使用:
plt.figure(figsize=(6,6))