dani reta
dani reta

Reputation: 69

Matplotlib: Assign legend to different figures

Inside a loop I am calculating some things and then I want to plot them in two different figures. I have set up the figures as

susc_comp, (ax1,ax2) = plt.subplots( 2, 1, sharex=True, sharey='none', figsize=(8.3,11.7)) 
cole_cole, (ax3) = plt.subplots( 1, 1, sharex='none', sharey='none', figsize=(8.3,11.7))
for j,temp in enumerate(indexes_T[i]):

     Calculate and plot in the corresponding ax1,ax2,ax3

plt.legend(loc=0, fontsize='small', numpoints = 1, ncol=(len(indexes_T[i]))/2, frameon=False)
susc_comp.savefig('suscp_components'+str(field)+'Oe.png', dpi=300)
cole_cole.savefig('Cole_Cole'+str(field)+'Oe.png', dpi=300)

But I get the legend only in the sus_comp figure (it is the same legend for both figures). How can I select the figure and add the legend to each of them?

Thank you very much!

Upvotes: 0

Views: 57

Answers (1)

DavidG
DavidG

Reputation: 25362

You can call figure.legend directly (although I think this may have less functionality than plt.legend). Therefore, I would do this a different way.

The question states that both legends are the same. In addition, the second figure only has 1 axes in it. Therefore one solution would be to get the handles and labels from ax3, then manually apply those to both figures. A simplified example is below:

import matplotlib.pyplot as plt

susc_comp, (ax1, ax2) = plt.subplots(1,2)
cole_cole, ax3 = plt.subplots()

ax1.plot([1,2,3], label="Test1")
ax2.plot([3,2,1], label="Test2")

ax3.plot([1,2,3], label="Test1")
ax3.plot([3,2,1], label="Test2")

handles, labels = ax3.get_legend_handles_labels()

ax2.legend(handles, labels, loc=1, fontsize='small', numpoints = 1)
ax3.legend(handles, labels, loc=1, fontsize='small', numpoints = 1)

plt.show()

This gives the following 2 figures:

enter image description here

enter image description here

Upvotes: 1

Related Questions