Réponse courte : vous pouvez utiliser bbox_to_anchor
+ bbox_extra_artists
+ bbox_inches='tight'
.
Réponse plus longue : Vous pouvez utiliser bbox_to_anchor
pour spécifier manuellement l'emplacement de la boîte de légende, comme d'autres personnes l'ont signalé dans les réponses.
Cependant, le problème habituel est que la boîte de légende est rognée, par exemple :
import matplotlib.pyplot as plt
# data
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]
# Plot
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)
# Add legend, title and axis labels
lgd = ax.legend( [ 'Lag ' + str(lag) for lag in all_x], loc='center right', bbox_to_anchor=(1.3, 0.5))
ax.set_title('Title')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
fig.savefig('image_output.png', dpi=300, format='png')
Afin d'éviter que la boîte de légende ne soit rognée, lorsque vous enregistrez la figure, vous pouvez utiliser les paramètres suivants bbox_extra_artists
et bbox_inches
pour demander savefig
pour inclure les éléments recadrés dans l'image enregistrée :
fig.savefig('image_output.png', bbox_extra_artists=(lgd,), bbox_inches='tight')
Exemple (j'ai seulement changé la dernière ligne pour ajouter 2 paramètres à fig.savefig()
) :
import matplotlib.pyplot as plt
# data
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]
# Plot
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)
# Add legend, title and axis labels
lgd = ax.legend( [ 'Lag ' + str(lag) for lag in all_x], loc='center right', bbox_to_anchor=(1.3, 0.5))
ax.set_title('Title')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
fig.savefig('image_output.png', dpi=300, format='png', bbox_extra_artists=(lgd,), bbox_inches='tight')
Je souhaite que matplotlib permette nativement un emplacement extérieur pour la boîte de légende comme Matlab fait :
figure
x = 0:.2:12;
plot(x,besselj(1,x),x,besselj(2,x),x,besselj(3,x));
hleg = legend('First','Second','Third',...
'Location','NorthEastOutside')
% Make the text of the legend italic and color it brown
set(hleg,'FontAngle','italic','TextColor',[.3,.2,.1])