2016-12-17 2 views
5

Ich möchte einfach senkrecht Vektoren in 2D. Ich habe 2 Möglichkeiten implementiert, um sie im folgenden Code zu zeichnen, aber die Vektoren "schauen" nicht senkrecht zu mir, wenn die Plots gezeichnet werden. Wenn es einen Unterschied macht, benutze ich Spyder.Ich möchte rechtwinklige Vektoren in Python plotten

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) 

Antwort

3

Ihr Problem besteht darin, dass sich die Größe der Einheit auf der X- und Y-Achse unterscheidet. Sie müssen sie zwingen, gleich zu sein.

In matplotlib.pyplot, fügen Sie die Zeile

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

kurz bevor Sie das Diagramm zeigen mit

plt.show() 

bekomme ich dieses Ergebnis in der IPython Konsole in Spyder:

enter image description here

Geben Sie in pylab die Zeileein
ax.set_aspect('equal') 

am Ende. Diese Liniensegmente sehen jedoch immer noch nicht senkrecht aus, und zwar deshalb, weil sie wirklich nicht senkrecht sind. Die Steigung Ihres ersten roten Liniensegments beträgt 2/3, daher sollte Ihr zweites grünes Liniensegment die Steigung -3/2 haben, aber es hat tatsächlich die Steigung -4/3. Vielleicht ist Ihre Linie

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

zu

ändern (Ich änderte die Endung -4 bis -5) die richtige zweite Steigung zu erhalten. Sie erhalten einen Wechsel von dieser ersten Figur mit dem zweiten:

enter image description here

enter image description here

und die letzten senkrecht sehen.

1

Das Problem ist das Seitenverhältnis der Abbildung Canvas.

Verwendung:

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