Правильный способ решения этой проблемы - создать пользовательский обработчик легенды . Нижеследующее основано на руководстве легенды matplotlib
import matplotlib
matplotlib.rcParams['text.usetex'] = True
import numpy as np
import scipy.io as sio
from matplotlib.legend_handler import HandlerPatch
import matplotlib.patches as mpatches
class HandlerArrow(HandlerPatch):
def create_artists(self, legend, orig_handle,
xdescent, ydescent, width, height, fontsize, trans):
p = mpatches.FancyArrow(0, 0.5*height, width, 0, length_includes_head=True, head_width=0.75*height )
self.update_prop(p, orig_handle, legend)
p.set_transform(trans)
return [p]
plt.style.use('ggplot')
#mat=sio.loadmat('MatlabDaten/absolut.mat')
#x=mat['x']
#x=x[0]
#xaufp=mat['xaufp']
#xaufp=xaufp[0]
#y=mat['y']
#y=y[0]
#yaufp=mat['yaufp']
#yaufp=yaufp[0]
#pfeillaenge=mat['pfeillaenge']
#pfeillaenge=pfeillaenge[0]
#pfeilpos=mat['pfeilpos']
x = [1,4]
y = [-1,1]
xaufp = [1,4]
yaufp = [-1,1]
pfeilpos = [[1,-1],[4,1]]
pfeillaenge = [0,0.25]
fig = plt.figure()
ppfad=plt.plot(x,y,'C0',label='Geplanter Pfad')
paufp=plt.plot(xaufp,yaufp,'C0o',label='Aufpunkte')
for count in pfeilpos:
ppfeil=plt.arrow(count[0],count[1],pfeillaenge[0],pfeillaenge[1], fc='C1', ec='C1', lw = 0.5, head_width=0.05, head_length=0.06, overhang = 0.3, length_includes_head= True, clip_on = False, label='Lokale Orientierung')
plt.xlim(0,5)
plt.ylim(-1.5,1.5)
plt.xlabel('$x$-Koordinate')
plt.ylabel('$y$-Koordinate')
plt.title('Absolute Orientierung')
h,l = plt.gca().get_legend_handles_labels()
h.append(ppfeil)
l.append('Lokale Orientierung')
plt.legend(h,l, handler_map={mpatches.FancyArrow : HandlerArrow()})
Обратите внимание, что это часто излишне, и вы также можете использовать способность scatter
использовать пользовательские маркеры , чтобы обмануть matplotlib:
import matplotlib
matplotlib.rcParams['text.usetex'] = True
import numpy as np
import scipy.io as sio
plt.style.use('ggplot')
#mat=sio.loadmat('MatlabDaten/absolut.mat')
#x=mat['x']
#x=x[0]
#xaufp=mat['xaufp']
#xaufp=xaufp[0]
#y=mat['y']
#y=y[0]
#yaufp=mat['yaufp']
#yaufp=yaufp[0]
#pfeillaenge=mat['pfeillaenge']
#pfeillaenge=pfeillaenge[0]
#pfeilpos=mat['pfeilpos']
x = [1,4]
y = [-1,1]
xaufp = [1,4]
yaufp = [-1,1]
pfeilpos = [[1,-1],[4,1]]
pfeillaenge = [0,0.25]
fig = plt.figure()
ppfad=plt.plot(x,y,'C0',label='Geplanter Pfad')
paufp=plt.plot(xaufp,yaufp,'C0o',label='Aufpunkte')
for count in pfeilpos:
ppfeil=plt.arrow(count[0],count[1],pfeillaenge[0],pfeillaenge[1], fc='C1', ec='C1', lw = 0.5, head_width=0.05, head_length=0.06, overhang = 0.3, length_includes_head= True, clip_on = False, label='Lokale Orientierung')
plt.scatter([],[],marker=r'$\rightarrow$', label='Lokale Orientierung', color='C1', s=100) # dummy scatter to add an item to the legend
plt.xlim(0,5)
plt.ylim(-1.5,1.5)
plt.xlabel('$x$-Koordinate')
plt.ylabel('$y$-Koordinate')
plt.title('Absolute Orientierung')
plt.legend()