Die matplotlib von Python hat die Funktion, einen Pfeil anzuzeigen.
import matplotlib.pyplot as plt
dx = 0.3
dy = 0.3
params = {
'width':0.01,
}
plt.arrow(0, 0, dx, dy, **params)
plt.xlim(-0.5, 0.5)
plt.ylim(-0.5, 0.5)
plt.show()
Wenn Sie den Start- und Endpunkt eines Pfeils festlegen, können Sie festlegen, ob der Pfeil ihn mit length_includes_head enthält oder nicht. Diese Einstellung ist standardmäßig nicht enthalten.
import matplotlib.pyplot as plt
dx = 0.0
dy = 0.2
params = {
'width':0.01,
}
plt.arrow(-0.1, 0, dx, dy, **params)
params = {
'width':0.01,
'length_includes_head':True,
}
plt.arrow(0.1, 0, dx, dy, **params)
plt.grid()
plt.xlim(-0.5, 0.5)
plt.ylim(-0.5, 0.5)
plt.show()
Wenn Sie einen Pfeil der Länge 0 zeichnen, ändert sich das Ergebnis abhängig davon, ob das Bügeleisen enthalten ist oder nicht. Wenn das Bügeleisen enthalten ist, tritt ein Fehler auf.
Wenn es kein Eisen enthält:
test1.py
import matplotlib.pyplot as plt
dx = 0.0
dy = 0.0
params = {
'width':0.01,
}
plt.arrow(0, 0, dx, dy, **params)
plt.xlim(-0.5, 0.5)
plt.ylim(-0.5, 0.5)
plt.show()
Bei Einbeziehung von Eisen:
test2.py
import matplotlib.pyplot as plt
dx = 0.0
dy = 0.0
params = {
'width':0.01,
'length_includes_head':True,
}
plt.arrow(0, 0, dx, dy, **params)
plt.xlim(-0.5, 0.5)
plt.ylim(-0.5, 0.5)
plt.show()
Traceback (most recent call last):
File "test2.py", line 9, in <module>
plt.arrow(0, 0, dx, dy, **params)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/pyplot.py", line 2411, in arrow
return gca().arrow(x, y, dx, dy, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 4822, in arrow
a = mpatches.FancyArrow(x, y, dx, dy, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/patches.py", line 1269, in __init__
super().__init__(verts, closed=True, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/patches.py", line 938, in __init__
self.set_xy(xy)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/patches.py", line 1005, in set_xy
self._path = Path(xy, closed=self._closed)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/path.py", line 130, in __init__
"'vertices' must be a 2D list or array with shape Nx2")
ValueError: 'vertices' must be a 2D list or array with shape Nx2
Wenn Sie die Länge des Pfeils und die Breite des Pfeils auf ein gutes Gefühl ändern, verschwindet der Fehler.
import matplotlib.pyplot as plt
dx = 1.0e-8
dy = 0.0
params = {
'width':1.0e-8,
'length_includes_head':True,
}
plt.arrow(0, 0, dx, dy, **params)
plt.xlim(-0.5, 0.5)
plt.ylim(-0.5, 0.5)
plt.show()
(Da nichts angezeigt wird, wird das Anzeigeergebnis weggelassen.)
Die Ursache ist der folgende Satz in der Nähe der Zeile 1227 von matplotlib / patches.py (/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/patches.py in meiner Umgebung).
if not length:
verts = [] # display nothing if empty
else:
...
Verts = [] ist also wegen des falschen Typs wütend. Der einfachste Weg, dies zu beheben, besteht darin, die Länge usw. kurz davor einzustellen.
if not length:
length = distance = 1.0E-8
if not length:
verts = [] # display nothing if empty
else:
...
(Da nichts angezeigt wird, wird das Anzeigeergebnis weggelassen.)
Bitte beachten Sie, dass die Anzeige seltsam ist, wenn die Länge des Pfeils kleiner als die Größe des Bügeleisens ist.
import matplotlib.pyplot as plt
dx = 0.001
dy = 0.0
params = {
'width':0.01,
'length_includes_head':True,
}
plt.arrow(0, 0, dx, dy, **params)
plt.xlim(-0.5, 0.5)
plt.ylim(-0.5, 0.5)
plt.show()