matplotlib de python a une fonction pour afficher une flèche.
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()
Lors de la définition des points de début et de fin d'une flèche, vous pouvez définir si la flèche la contient ou ne l'inclut pas avec length_includes_head. C'est un paramètre qui n'est pas inclus par défaut.
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()
Lorsque vous dessinez une flèche de longueur 0, le résultat changera selon que le fer est inclus ou non, et une erreur se produira si le fer est inclus.
S'il ne comprend pas de fer:
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()
En incluant le fer:
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
Si vous modifiez la longueur de la flèche et la largeur de la flèche en une bonne sensation, l'erreur disparaît.
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()
(Comme rien n'est affiché, le résultat d'affichage est omis)
La cause est la phrase suivante près de la ligne 1227 de matplotlib / patches.py (/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/patches.py dans mon environnement)
if not length:
verts = [] # display nothing if empty
else:
...
Donc, verts = [] est en colère à cause du mauvais type. Le moyen le plus simple de résoudre ce problème est de définir la longueur, etc. juste avant cela.
if not length:
length = distance = 1.0E-8
if not length:
verts = [] # display nothing if empty
else:
...
(Comme rien n'est affiché, le résultat d'affichage est omis)
Veuillez noter que l'affichage sera étrange si la longueur de la flèche est inférieure à la taille du fer.
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()
Recommended Posts