You can just set the handletextpad
and handlelength
in the legend via the legend_handler
as shown below:
import matplotlib.pyplot as plt
import numpy as np
# Plot up a generic set of lines
x = np.arange( 3 )
for i in x:
plt.plot( i*x, x, label='label'+str(i), lw=5 )
# Add a legend
# (with a negative gap between line and text, and set "handle" (line) length to 0)
legend = plt.legend(handletextpad=-2.0, handlelength=0)
Detail on handletextpad
and handlelength
is in documentation (linked here, & copied below):
handletextpad : float or None
The pad between the legend handle and text. Measured in font-size
units. Default is None, which will take the value from
rcParams["legend.handletextpad"].
handlelength : float or None
The length of the legend handles. Measured in font-size units. Default
is None, which will take the value from
rcParams["legend.handlelength"].
With the above code:
With a few extra lines the labels can have the same color as their line. just use .set_color()
via legend.get_texts()
.
# Now color the legend labels the same as the lines
color_l = ['blue', 'orange', 'green']
for n, text in enumerate( legend.texts ):
print( n, text)
text.set_color( color_l[n] )
Just calling plt.legend()
gives:
legend.handlelength
to0
- see e.g. here. – Daryl